hdu 2086 A1 = ?

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2086

题目大意:只怪数学不行 网上看到的觉得很好。。。。

  1. 因为:Ai=(Ai-1+Ai+1)/2 - Ci,  

    1.       A1=(A0  +A2  )/2 - C1; 
    2.       A2=(A1  +  A3)/2 - C2 , ... 
    3. =>    A1+A2 = (A0+A2+A1+A3)/2 - (C1+C2) 
    4.       2[(A1+A2)+(C1+C2)] = A0+A2+A1+A3; 
    5.       A1+A2 = A0+A3 - 2(C1+C2); 
    6. =>    A1+A2 =  A0+A3 - 2(C1+C2)  
    7. 同理可得: 
    8.       A1+A1 =  A0+A2 - 2(C1)  
    9.       A1+A2 =  A0+A3 - 2(C1+C2) 
    10.       A1+A3 =  A0+A4 - 2(C1+C2+C3) 
    11.       A1+A4 =  A0+A5 - 2(C1+C2+C3+C4) 
    12.       ... 
    13.       A1+An = A0+An+1 - 2(C1+C2+...+Cn) 
    14. ----------------------------------------------------- 左右求和 
    15.      (n+1)A1+(A2+A3+...+An) = nA0 +(A2+A3+...+An) + An+1 - 2(nC1+(n-1)C2+...+2Cn-1+Cn) 
    16.   
    17. =>   (n+1)A1 = nA0 + An+1 - 2(nC1+(n-1)C2+...+2Cn-1+Cn) 
    18.   
    19. =>   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 }

 

你可能感兴趣的:(HDU)