Ranking (as of 2015-12-07): 34 out of 831
Language: C++
/*
UVa 815 - Flooded!
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_815_Flooded.cpp
*/
#include <algorithm>
#include <limits>
#include <cstdio>
using namespace std;
int main()
{
const int n_max = 30, m_max = 30, nr_elevations_max = n_max * m_max;
const double epsilon = numeric_limits<double>::epsilon(),
square_area = 10.0 * 10.0;
for (int r = 1; ; r++) {
int m, n;
scanf("%d %d", &m, &n);
if (!m)
break;
int i, nr_elevations = m * n, elevations[nr_elevations_max];
double water;
for (i = 0; i < nr_elevations; i++)
scanf("%d", &elevations[i]);
scanf("%lf", &water);
printf("Region %d\n", r);
sort(elevations, elevations + nr_elevations);
double height = elevations[0];
if (water) {
double area = square_area;
for (i = 0; i < nr_elevations - 1; i++, area += square_area) {
double h = elevations[i + 1] - elevations[i], v = area * h;
if (v - water >= epsilon) { // v >= water
h = water / area;
height += h;
water = 0.0;
break;
}
else {
height = elevations[i + 1];
water -= v;
}
#ifdef DEBUG
printf("%.2lf %.2lf\n", height, water);
#endif
}
if (water > epsilon)
height += water / area;
}
else
i = -1;
printf("Water level is %.2lf meters.\n", height);
printf("%.2lf percent of the region is under water.\n\n",
static_cast<double>(i + 1) * 100.0 / nr_elevations);
}
return 0;
}
No comments:
Post a Comment