原题链接:https://vjudge.net/problem/UVA-815
分类:函数
备注:思维
前言:作者说方法很多,但是我只想着AC了就好,其它方法以后再来想吧,我只能说我这个代码挺简单的。
注意:精确度不用特别注意也可以AC,就算uDebug没过,只要答案相差的不离谱应该没问题。
代码如下:
#include<stdio.h>
#include<stdlib.h>
int n, m, cnt, kase;
double H[1000], left;
int cmp(const void* a, const void* b)
{
return *(double*)a - *(double*)b;
}
void solve()
{
int coverd = 1;
double level = H[1] , percent = 0;
for (int i = 2; i <= cnt; i++)
{
while (H[i] == H[i - 1]) { i++; coverd++; continue; }
double cha = H[i] - H[i - 1];
double detaV = cha * coverd * 100;
if (left >= detaV)
{
left -= detaV;
level = H[i];
coverd++;
}
else break;
}
if (left > 0)level += left / (coverd * 100);
printf("Water level is %.2lf meters.\n", level);
percent = 1e2 * coverd / cnt;
printf("%.2lf percent of the region is under water.\n\n", percent);
}
int main(void)
{
while (scanf("%d%d", &n, &m) == 2 && n)
{
printf("Region %d\n", ++kase);
cnt = n * m;
for (int i = 1; i <= cnt; i++)
scanf("%lf", &H[i]);
scanf("%lf", &left);
qsort(H + 1, cnt, sizeof(double), cmp);
solve();
}
return 0;
}