網頁

2014年2月10日 星期一

UVa 10014 Simple calculations

題目連結
想法:
a[i] = (a[i-1]+a[i+1])/2-c[i],代入i値,左右兩式從1加到n,消除多餘項目後可得到:
  • a[1]+a[n] = a[0]+a[n+1] - 2*(c[1]+...+c[n])
再從這個等式代入n値,左右兩式從1加到n,可得到
  • (n+1)*a[1] = n*a[0] + a[n+1] - 2*[n*c[1] + (n-1)*c[2] + ... + 1*c[n]]
此時只剩下a[1]為未知數。


#include <cstdio>
#include <algorithm>
using namespace std;
double a0,an1,c[3010];
int Case, N;
double sum_c()
{
double sum = 0;
for (int i = 1, j = N; i <= N; i++, j--)
sum += (c[i] * j);
return sum;
}
int main()
{
scanf("%d", &Case);
while (Case--){
scanf("%d", &N);
scanf("%lf %lf", &a0, &an1);
for (int i = 1; i <= N; i++)
scanf("%lf",&c[i]);
printf("%.2f\n", (N * a0 + an1 - 2 * sum_c()) / (N+1));
if (Case) printf("\n");
}
return 0;
}

沒有留言:

張貼留言