先将地面海拔进行排序,将水的体积和地面海拔较低处产生的总体积相加平均后为当前水量的绝对海拔值,如果低说明只能淹没这一层,高了往后平均判断。表示因为空行设置在两个region之间而不是每个region之后被wa了十几发(很绝望)。
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 50;
const int s = 100;
int region[maxn*maxn];
int main()
{
int m, n, num, whole, judge;
double percent, height, water;
judge = 0;
whole = 1;
percent = water = height = 0;
cin>>m>>n;
while(m!=0 && n!=0)
{
// if(judge>0)
// {
// cout<<endl;
// }
num = 0;
memset(region,0 , sizeof(region));
for(int i=0; i<m*n; i++)
{
cin>>region[i];
}
cin>>water;
sort(region, region+m*n);//从小到大将网格海拔排序
for(int i=0; i<m*n; i++)
{
water += region[i] * s;
height = (water*1.0) / (s * (i +1));
num++;
if(height <= region[i+1])
{
num = i+1;
break;
}
}
percent = (1.0 * s * num) / (n*m*1.0);
printf("Region %d\n", whole++);
printf("Water level is %.2lf meters.\n", height);
printf("%.2lf percent of the region is under water.\n\n", percent);
++judge;
cin>>m>>n;
}
return 0;
}