先sort一下,在计算出相邻高度差,再依次计算蓄水量
如案例中,13*100+2*200+7*300......
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
#define maxn 1000
int main()
{
int m,n,kase=0;
while(scanf("%d%d",&m,&n)==2&&m)
{
int R[maxn]={0},w;
for(int i=0;i<m*n;i++)
scanf("%d",&R[i]);
scanf("%d",&w);
sort(R,R+m*n);
int high=R[0];
for(int i=0;i<m*n-1;i++) R[i]=R[i+1]-R[i];
int sum=0,cnt=1;
for(int i=0;i<m*n-1;i++,cnt++)
<span style="white-space:pre"> </span>if(sum+R[i]*cnt*100>w) break;
<span style="white-space:pre"> </span>else sum+=R[i]*cnt*100,high+=R[i];
printf("Region %d\n",++kase);
printf("Water level is %.2f meters.\n",(double)(w-sum)/(cnt*100)+high);
printf("%.2f percent of the region is under water.\n\n",((double)cnt/(m*n))*100);
}
}