首页 > 学院 > 开发设计 > 正文

HDU - 2086 = A1 = ?

2019-11-08 03:01:31
字体:
来源:转载
供稿:网友

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;}

小结

纯数学题好像比算法还要难哎(不过应该是我啥算法都不会的缘故吧)。。
上一篇:Hibernate多对多

下一篇:SSM_02_拦截器

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表