有一个n*m(1≤m,n<30)的网格,每个格子是边长10米的正方形,网格四周是无限大
的墙壁。输入每个格子的海拔高度,以及网格内雨水的总体积,输出水位的海拔高度以及有
多少百分比的区域有水(即高度严格小于水平面)
解题思路非常直观可以直接看代码
#include <bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long int LL;
const int maxn = 1005;
const int inf = 0x3f3f3f3f;#include <bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long int LL;
const int maxn = 1005;
const int inf = 0x3f3f3f3f;
using namespace std;
//int vaule[maxn];
int main(void)
{
#ifdef MYLOCAKYACM
// freopen("input.in","r",stdin);
// freopen("output.out","w",stdout);
#endif // MYLOCA
int n,m;
int v[maxn];
int kase = 0;
while(scanf("%d%d",&n,&m)!=EOF&&(n||m))
{
mem(v,0);
for(int i = 0;i<n*m;i++)
{
scanf("%d",&v[i]);
}
sort(v,v+m*n);
v[m*n] = inf;//保证在最后一定会break;
double maxd;scanf("%lf",&maxd);
maxd /= 100;
int i = 0;
for(;i<n*m;i++)
{
maxd += v[i];
if(maxd/(i+1)<=v[i+1])break;
}
printf("Region %d\n",++kase);
printf("Water level is %.2lf meters.\n",(double)maxd/(i+1));
printf("%.2lf percent of the region is under water.\n\n",(i+1)*100.0/(m*n));
}
return 0;
}
using namespace std;
//int vaule[maxn];
int main(void)
{
#ifdef MYLOCAKYACM
// freopen("input.in","r",stdin);
// freopen("output.out","w",stdout);
#endif // MYLOCA
int n,m;
int v[maxn];
int kase = 0;
while(scanf("%d%d",&n,&m)!=EOF&&(n||m))
{
mem(v,0);
for(int i = 0;i<n*m;i++)
{
scanf("%d",&v[i]);
}
sort(v,v+m*n);
v[m*n] = inf;
double maxd;scanf("%lf",&maxd);
maxd /= 100;
int i = 0;
for(;i<n*m;i++)
{
maxd += v[i];
if(maxd/(i+1)<=v[i+1])break;
}
printf("Region %d\n",++kase);
printf("Water level is %.2lf meters.\n",(double)maxd/(i+1));
printf("%.2lf percent of the region is under water.\n\n",(i+1)*100.0/(m*n));
}
return 0;
}