这题比较简单, 但要注意数据类型。
// uva815.cpp
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define MAX 1000000
#define MAXN 900
int elevation[MAXN];
int main(){
int n, m, kase = 0;
while (scanf("%d%d", &n, &m) != EOF && n != 0){
int p = 1;
for (int row = 1; row <= m; row++)
for (int col = 1; col <= n; col++)
scanf("%d", &elevation[p++]);
std::sort(elevation + 1, elevation + p);
int tot = n * m;
elevation[tot + 1] = MAX; // sentinal
scanf("%d", &p);
double left_water = p / 100.0; // p may less than 100, so the type of left_water cannot be integer
int pre = 1, next = 1;
double water_level = elevation[1];
int submerged;
for(;;){
while (elevation[pre] == elevation[next]) next++;
if (next == tot + 1) { // it can conclude that elevation[tot - 1] == elevation[tot]
submerged = tot;
water_level = elevation[pre] + left_water * 1.0 / tot;
break;
}
else{ // elevation[pre] != elevation[next]
if (left_water <= (next - 1) * (elevation[next] - elevation[pre])){
submerged = next - 1 ;
water_level = elevation[pre] + left_water * 1.0 / (next - 1);
break;
}
else {
left_water = left_water - (next - 1) * (elevation[next] - elevation[pre]);
pre = next;
}
}
}
printf("Region %d\n", ++kase);
printf("Water level is %.2lf meters.\n", water_level);
printf("%.2lf percent of the region is under water.\n\n", 100.0 * submerged / float(tot));
}
return 0;
}
本文介绍了一个解决UVA815问题的C++程序实现,该问题涉及通过给定地形高度和降雨量来计算区域内的平均水位及淹没百分比。文章通过排序和逐个检查地形高度的方法来确定最终的水位。
1841

被折叠的 条评论
为什么被折叠?



