Ranking (as of 2015-08-06): 17 out of 489
Language: C++
/*
UVa 1388 - Graveyard
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_1388_Graveyard.cpp
*/
#include <algorithm>
#include <cstdio>
using namespace std;
const double perimeter = 10000.0;
const int n_max = 1000, m_max = 1000;
double cds[n_max], nds[n_max + m_max]; // current / new distances
int main()
{
int n, m;
while (scanf("%d %d", &n, &m) != EOF) {
m += n;
for (int i = 0; i < n; i++)
cds[i] = (perimeter * (i + 1)) / n;
for (int i = 0; i < m; i++)
nds[i] = (perimeter * (i + 1)) / m;
double d = 0.0;
for (int i = 0, j = 0; i < n - 1; ) {
if (cds[i] < nds[j]) {
d += min(cds[i] - nds[j - 1], nds[j] - cds[i]);
i++;
}
else if (cds[i] > nds[j])
j++;
else {
i++, j++;
}
}
printf("%.4lf\n", d);
}
return 0;
}
No comments:
Post a Comment