当输入是
```
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