70分WA求助

P1318 积水面积

当输入是 ``` 11 0 1 0 2 1 2 0 0 2 0 1 ``` 你的程序 ``` 6 ``` 答案 ``` 7 ```
by ge_zhe @ 2023-07-28 13:01:32


@[19x31](/user/644846) 经过分析可得,你的代码无法处理结尾水面高度递减的情况,但可以处理开头递增情况 修改思路显而易见,找出最高点,将开头递增情况前后模拟两遍,就愉快的A了[记录](https://www.luogu.com.cn/record/117813134) ```cpp #include<bits/stdc++.h> using namespace std; int t,n,k,a[100005],r[100005],b[100005],h[100005],ans=0; int main() { cin>>n; int ax=-1; for(int i=1;i<=n;i++){ cin>>a[i]; if(a[i]>a[ax]) { ax=i; } } b[1]=a[1]; b[n]=a[n]; h[1]=0; h[n]=0; for(int i=2;i<=ax;i++){ if(a[i]<b[i-1]){ h[i]=b[i-1]-a[i]; b[i]=b[i-1]; }else{ b[i]=a[i]; h[i]=0; } } for(int i=1;i<=ax;i++){ ans+=h[i]; } for(int i=n-1;i>=ax;i--){ if(a[i]<b[i+1]){ h[i]=b[i+1]-a[i]; b[i]=b[i+1]; }else{ b[i]=a[i]; h[i]=0; } } for(int i=n-1;i>=ax;i--){ ans+=h[i]; } cout<<ans; return 0; } ```
by ge_zhe @ 2023-07-28 13:16:11


thx.已关注,此贴结
by 19x31 @ 2023-07-28 14:38:08


|