zoukankan      html  css  js  c++  java
  • hdoj-2086-A1=?

    题目:A1=?

    代码(作者:Fistice):

    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<queue>
    #include<stack>
    #include<cstdlib>
    #include<vector>
    #include<algorithm>
    using namespace std;
    #define INF 99999999
    double c[3005]={0},a0,an1;
    int n;
    int main()
    {
        int i,j;
        while(~scanf("%d",&n))
        {
            scanf("%lf%lf",&a0,&an1);
            for(i=1;i<=n;i++)
            scanf("%lf",&c[i]);
            
            double sum=0;
            sum+=n*a0+an1;
            
            for(i=1;i<=n;i++)
            {
                sum-=(n-i+1)*c[i]*2;
            }
            sum/=n+1;
            printf("%.2lf
    ",sum);
        }
    }
    

    下面是网上的解析,很清楚。

    因为:Ai=(Ai-1+Ai+1)/2 - Ci,  
          A1=(A0  +  A2)/2 - C1;  //(1)式
          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 - 2(C1)  //注:A1+A1=2A1=(A0 + A2)-2*C1 由(1)式得。
          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) 
    
    

    Posted by Fistice at 2016-02-19 15:09:37 on Problem 2086

    做后小结:
    只能说这道题的推导过程自己能够理解,但是没有一定的思维逻辑和数学基础很难ac这题。
    刚刚开始用函数递归来求解。但是对于数学题,递归往往效率相对数学算法低且容易T。
    很有趣也很需要思考的一道题,记之。

  • 相关阅读:
    1scala基础
    3scala高级
    03spark kafka
    01spark基础
    04spark streaming
    2scala集合
    02spark sql
    学习java程序设计环境的心得
    第五章继承
    第二周学习Java心得
  • 原文地址:https://www.cnblogs.com/qq952693358/p/5276749.html
Copyright © 2011-2022 走看看