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

HDU 2086 A1 = 杭电acm

2019-11-08 02:46:57
字体:
来源:转载
供稿:网友

A1 = ?

Time Limit: 5000/1000 MS (java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7874    Accepted Submission(s): 4880PRoblem Description有如下方程:Ai = (Ai-1 + Ai+1)/2 - Ci (i = 1, 2, 3, .... n).若给出A0, An+1, 和 C1, C2, .....Cn.请编程计算A1 = ? Input输入包括多个测试实例。对于每个实例,首先是一个正整数n,(n <= 3000); 然后是2个数a0, an+1.接下来的n行每行有一个数ci(i = 1, ....n);输入以文件结束符结束。 Output对于每个测试实例,用一行输出所求得的a1(保留2位小数). Sample Input
150.0025.0010.00250.0025.0010.0020.00 Sample Output
27.5015.00 

这个题  就是个数学题   推理 找 公式  

Ai = (Ai-1 + Ai+1)/2 - Ci (i = 1, 2, 3, .... n). 用A5做示范,就能猜测出公式来。证明方法可以采用数学归纳法。这里证明从略。A5 = (A4 + A6) / 2 - C5

A4 = (A3 + A5) / 2 - C4 = A3 / 2 + A4 / 4 + A6 / 4 - C5 / 2 - C4=>A4 = 2A3/3 + A6/3 - 2C5/3 - 4C4/3

A3 = (A2 + A4) / 2 - C3 = A2 / 2 + A3 / 3 + A6 / 6 - C5 / 3 - 2C4 / 3 - C3=>A3 = 3A2/4 + A6/4 - C5/2 - C4 - 3C3/2

A2 = (A1 + A3) / 2 - C2 = A1 / 2 + 3A2 / 8 + A6 / 8 - C5 / 4 - C4 / 2 - 3C3 / 4 - C2=>A2 = 4A1/5 + A6/5 - 2C5/5 - 4C4/5 - 6C3/5 - 8C2/5

A1 = (A0 + A2) / 2 - C1 = A0 / 2 + 2A1 / 5 + A6 / 10 - C5 / 5 - 2C4 / 5 - 3C3 / 5 - 4C2 / 5 - C1=>A1 = 5A0/6 + A6/6 - C5/3 - 2C4/3 - C3 - 4C2/3 - 5C1/3

所以公式为::A1 = (n * A0 + An+1 - 2 * Cn - 4 * Cn-1 - ... - 2 * i * Cn-i+1 - 2 * n * C1) / (n + 1) 

//2086  公式推导/*	A1 = (n * A0 + An+1 - 2 * Cn - 4 * Cn-1 - ... - 2 * i * Cn-i+1 - 2 * n * C1) / (n + 1) 	 2 4 6 8 10 12 14 16   --2n*/ #include<stdio.h>int main(){	int n;	double c[10000],a0,an;	int i,j;	double res;	while(~scanf("%d %lf %lf",&n,&a0,&an))	{		for(i=1;i<=n;i++)			scanf("%lf",&c[i]);		res=n*a0+an;		for(i=n,j=1;i>0;i--,j++)		{			res-=2*j*c[i];		}		printf("%.2f/n",res/(n+1));	 } 	return 0;}


上一篇:网路与RPC

下一篇:基础练习 完美的代价

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