Run Time: 0.050
Ranking (as of 2016-07-19): 30 out of 402
Language: C++11
/*
UVa 10883 - Supermean
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_10883_Supermean.cpp
*/
#include <cstdio>
#include <cmath>
const int n_max = 50000;
double sums_of_log2s[n_max + 1];
// sums_of_log2s[i] is the sum of log2[i] (i = 1, 2, ..., i)
int numbers[n_max];
double coefficient(int n, int k)
{
double d = static_cast<double>(-n);
if (k)
d += sums_of_log2s[n] - sums_of_log2s[n - k] - sums_of_log2s[k];
return pow(2.0, d);
}
int main()
{
double s = 0.0;
for (int i = 1; i <= n_max; i++) {
s += log2(static_cast<double>(i));
sums_of_log2s[i] = s;
}
int N;
scanf("%d", &N);
for (int cn = 1; cn <= N; cn++) {
int n;
scanf("%d", &n);
double sm = 0.0, d;
for (int k = 0; k < n; k++) {
scanf("%lf", &d);
sm += coefficient(n - 1, k) * d;
}
printf("Case #%d: %.3lf\n", cn, sm);
}
return 0;
}
No comments:
Post a Comment