90pts 求调 (P1318) 玄关

P1318 积水面积

```cpp #include<bits/stdc++.h> using namespace std; int n,h,l,r,fg1,fg2,ans,ma; bool mp[5005][10005]; bool fl[5005][10005]; int arr[114514]; int main() { cin>>n; for(int i=0;i<n;i++) { cin>>h; ma=max(ma,h); for(int j=0;j<h;j++) { mp[i][j]=1; } } for(int j=0;j<ma;j++) { for(int i=0;i<n;i++) { if (mp[i][j]==0 && fl[i][j]==0) { l=i,r=i,fg1=0,fg2=0; while(l>=0) { if (mp[l][j]==1) { fg1=1; break; } l--; } while(r<n) { if (mp[r][j]==1) { fg2=1; break; } r++; } //cout<<i<<" "<<j<<" "<<l<<" "<<r<<endl; if (fg1 && fg2) { for(int k=l+1;k<r;k++) { fl[k][j]=1; } } } } } for(int i=0;i<n;i++) { for(int j=0;j<ma;j++) { ans+=fl[i][j]; } } cout<<ans; } ``` @[tzzl3035](/user/1030559)
by Fish_redflying @ 2024-10-22 23:50:37


考虑遍历每一个空格,一旦发现空格没被标记过,设定左右指针遍历到第一堵墙。如果有碰到墙,将它计入标记数组。循环往复。最后统计标记即可。
by Fish_redflying @ 2024-10-22 23:55:59


|