比较简单的一道题, 紫书上说比较考验思维的...
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <set>
#include <queue>
#include <map>
using namespace std;
const int MAXN = 100 + 10;
typedef long long LL;
/*
uva 815
*/
int m, n;
float amount;
vector<int> blocks;
int main(){
int Case = 0;
while( scanf("%d %d",&m,&n) && m!=0 && n!=0 ){
int tmp;
blocks.clear();
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
scanf("%d",&tmp);
blocks.push_back(tmp);
}
}
cin >> amount;
sort(blocks.begin(),blocks.end());
int i, deep, sum_water = 0, SQUARE = 100;
for(i=0; i<blocks.size()-1; i++){
deep = blocks[i+1]-blocks[i];
if( deep*SQUARE<amount ){
amount -= deep*SQUARE;
SQUARE += 100;
}else{
break;
}
}
int block_num = i+1;
float water_level = (float)blocks[i] + amount/SQUARE;
float percentage = 100.0*block_num/(m*n);
printf("Region %d\n",++Case);
printf("Water level is %.2f meters.\n",water_level);
printf("%.2f percent of the region is under water.\n\n",percentage);
}
return 0;
}