HDU - 2086 = A1 = ?

来源:互联网 发布:巨灵金融怎么查数据 编辑:程序博客网 时间:2024/05/29 03:20

HDU - 2086 = A1 = ?

数学题,本(zhi)人(zhang)觉得挺难的。。。

题目

欧麦咖

解题思路

数学“思想”

因为  Ai = (Ai-1 + Ai+1) / 2 - Ci    A1 = (A0 + A2) / 2 - C1;    A2 = (A1 + A3) / 2 - C2;=>  A1 + A2 = (A0 + A2 + A1 + A3) / 2 - (C1 + C2);=>  A1 + A2 = (A0 + A3) - 2(C1 + C2);同理: A1 + A1 = (A0 + A2) - 2C1;    A1 + A2 = (A0 + A3) - 2(C1 + C2 + C3);    A1 + A3 = (A0 + A4) - 2(C1 + C2 + C3 + C4);    ...    A1 + An = (A0 + An+1) - 2(C1 + C2 + ... + Cn);对上式求和:    nA1 + A1 + (A2 + A3 + ... + An) = nA0 + (A2 + A3 + ... + An) + An+1 - 2(nC1 + (n-1)C2 + ... + 2Cn-1 + Cn);=>  (n+1)A1 = nA0 + An+1 - 2(nC1 + (n-1)C2 + ... + 2Cn-1 + Cn);综上: A1 = [nA0 + An+1 - 2(nC1 + (n-1)C2 + ... + 2Cn-1 + Cn)] / (n + 1)。

小波折

一开始用的cin输入的,直接Tle了,忘了输入项非常多了。。。

Ac代码

// 2086 - A1 = ?int main() {    const int maxn = 3030;    int n;    double x, y, c[maxn];   // x为A0,y为An+1     while (~scanf("%d", &n)) {        scanf("%lf%lf", &x, &y);        for (int i = 1; i <= n; i++) {            scanf("%lf", &c[i]);    // 不能用cin,会Tle         }        double sum = 0.0;        for (int i = 1; i <= n; i++) {            sum += (n - i + 1) * c[i];        }        sum = (n * x + y - 2 * sum) / (n + 1);        printf("%.2lf\n", sum);    }    return 0;}

小结

  • 纯数学题好像比算法还要难哎(不过应该是我啥算法都不会的缘故吧)。。
0 0
原创粉丝点击