有一个n*m(1<=m,n<30)的网格,每个格子是边长为10米的正方形,网格四周是无限长的墙壁。输入每个盒子的海拔高度,以及网格内雨水的总体积,输出水位的海拔高度和有多少百分比的区域有水。(高度严格小于水平面)
#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int s[900];
int main()
{
int i,j,m,n,total,cnt=1,num,flag,diff,water;
double level;
while(scanf("%d%d",&m,&n)&&m&&n)
{
memset(s,0,sizeof(s));
total=m*n;
for(i=0;i<total;i++)
{
scanf("%d",&s[i]);
s[i]=s[i]*100;
}
scanf("%d",&water);
sort(s,s+total);
while(water>0)
{
flag=s[0];
num=0;
for(i=0;i<total;i++)
{
if(s[i]==flag)
{
num++;
}
else if(s[i]!=flag)
{
diff=s[i]-s[0];
break;
}
}
if(i<total)
{
diff=diff*num;
if(diff>=water)
{
level=flag+(double)(water)/double(num);
level=level/100.0;
break;
}
else if(water>diff)
{
water-=diff;
for(j=0;j<num;j++)
{
s[j]=s[i];
}
}
}
else
{
level=flag+double(water)/double(num);
level/=100.0;
break;
}
}
printf("Region %d\n",cnt++);
printf("Water level is %.2f meters.\n",level);
printf("%.2lf percent of the region is underwater.\n\n",double(num)/double(total)*100.0);
}
}