#include<iostream>#include<algorithm>#include<stdio.h>#include<string.h>usingnamespace std;intmain(){//freopen("C:\\1.txt","r",stdin);//freopen("C:\\lzz.txt","w",stdout); int n,m,i,a[900],Rain,j,sum,sum1,k1,p=1,k3;double level,k2;while(~scanf("%d%d",&n,&m)){if(n==0&&m==0)break;for(i=0;i<n*m;i++){scanf("%d",&a[i]);} //输入n*m个数,可以看成每个10*10格子内放底面积为10*10,高为a【i】的柱子
//柱子高度可能会低于0,低于海拔高度scanf("%d",&Rain);//输入降雨量体积sort(a,a+n*m);//对柱子高低进行排序,排成一排的。if(n*m>1)//格子数量大于1.{for(i=1;i<n*m;i++){
sum=0;for(j=0;j<i;j++){
k3=a[i-1];
sum+=a[i]-a[j];
a[j]=a[i];}//先让雨填最低的柱子,使其水面和下一个柱子同高,以此类推。if(Rain-sum*100>0) //填到第i个柱子的时候,降雨量的剩余。{if(i!=n*m-1){
Rain-=sum*100;}//i!=n*m-1,就是不是最后一次elseif(i==n*m-1){
Rain-=sum*100;
k1=i+1;
level=Rain*1.0/(n*m*100)+a[i];
k2=k1*1.0/(n*m)*100;}//最后一次,降雨量还是大于0,所以海平面高度}//为最高的柱子加上最后雨量除于总底面积,被淹没//的柱子数量为全部,所以为百分之一百。
else//当最后雨量少于0,所以淹没到第i个柱子就没了{
k1=i;
level=k3+Rain*1.0/(k1*100);
k2=k1*1.0/(n*m)*100;break;}}printf("Region %d\n",p);printf("Water level is %.2lf meters.\n",level);printf("%.2lf percent of the region is under water.\n\n",k2);}else//当格子只有一个,应该好理解。{printf("Region %d\n",p);printf("Water level is %.2lf meters.\n",Rain*1.0/100+a[0]);printf("100.00 percent of the region is under water.\n\n");}
p++;memset(a,0,sizeof(a));}return0;}