您的位置:首页 > 其它

hdu 2086 A1 = ?

2015-10-12 14:19 411 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2086
题目大意:只怪数学不行 网上看到的觉得很好。。。。

因为: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) 

      2[(A1+A2)+(C1+C2)] = A0+A2+A1+A3; 

      A1+A2 = A0+A3 - 2(C1+C2); 

=>    A1+A2 =  A0+A3 - 2(C1+C2)  

同理可得: 

      A1+A1 =  A0+A2 - 2(C1)  

      A1+A2 =  A0+A3 - 2(C1+C2) 

      A1+A3 =  A0+A4 - 2(C1+C2+C3) 

      A1+A4 =  A0+A5 - 2(C1+C2+C3+C4) 

      ... 

      A1+An = A0+An+1 - 2(C1+C2+...+Cn) 

----------------------------------------------------- 左右求和 

     (n+1)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) 

 

 

 

 

 

附上代码

1 #include <iostream>
2 #include <cstdio>
3
4 using namespace std;
5 int main ()
6 {
7     int i,j,n;
8     double sum;
9     while (~scanf("%d",&n))
10     {
11         sum=0;
12         double a[3500],c[3500],d;
13         scanf("%lf%lf",&a[0],&a[n+1]);
14         for (i=1; i<=n; i++)
15             scanf("%lf",&c[i]);
16         a[1]=n*a[0]+a[n+1];
17         for (i = n, j = 1; i >=1&&j <= n; j++,i--)
18             sum += i*c[j];
19         a[1] = (a[1] - 2*sum)/(n+1);
20         //sum+=c[i];
21         //cout<<a[1]<<endl;
22         printf ("%.2lf\n",a[1]);
23     }
24     return 0;
25 }


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: