题意
给定一张N∗M的地图,每个格子有一个海拔高度。有一个降雨量V,求降水后水面的高度和被水覆盖的陆地的体积。
二分降水后的水面高度。
顺便处理被水覆盖的体积。
#include <cstdio>
#define N 410
int A[N][N],n,m,v;
long long Ans;
inline bool check(int x){
long long w=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(A[i][j]<x) w+=x-A[i][j];
return w>=v;
}
int main(){
scanf("%d%d%d",&n,&m,&v);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&A[i][j]);
int l=1,r=v,mid;
while(l<r) check(mid=l+r>>1)?r=mid:l=mid+1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(A[i][j]<=r) Ans+=A[i][j];
return printf("%d %lld\n",r,Ans),0;
}
本文介绍了一种利用二分查找算法解决特定地图上降水后水面高度及被水覆盖陆地体积的问题。通过遍历地图上的每个格子,并对比海拔高度与设定的水位高度来计算总的水量。
1316

被折叠的 条评论
为什么被折叠?



