zoukankan      html  css  js  c++  java
  • 新生赛 1011 世界的光棍节礼物

    题目:

         现在,11.11在大学生活中是个特殊的日子,很多学校都把它当成男生节,作为师姐,LPT也想给师弟发下福利,可是师弟那么多,如何发?于是她想了一个点子,
    可以出一道数学题考考师弟们,前三位AC这道题的师弟就可以得到小礼物啦!
    有一组数列,它有n+2个元素,a[0],a[1], ..., a[n+1] (n <= 3000, -10000 <= a[i]<=10000) ,对于i = 1,2,3,...,n满足$a_i-c_i=frac{a_{i-1}+a_{i+1}}{2}-b_i$,
    如果给出a[0],a[n+1] 以及集合B、C的所有元素值(即给出b[1],b[2]...b[n]和c[1],c[2],...,c[n],-100≤b[i], c[i]≤100),都是保留小数点后两位的数,聪明的
    你能否算出a[1]?

    思路:

          首先,常数项可以并在一起,$a_i-c_i=frac{a_{i-1}+a_{i+1}}{2}-b_i$用 $d_i  = b_i -c_i$ 把式子变形成:$a_i=frac{a_{i-1}+a_{i+1}}{2}-d_i$

    再次变形:$a_{i+1} - a_i - 2d_i = a_i - a_{i-1}$         ···  (1)

          然后,i = 1开始,到i = n,根据公式得到 n个式子

        $a_2 - a_1 - 2d_1 = a_1 - a_0$   

        $a_3 - a_2 - 2d_2 = a_2 - a_1$   

        ···

        $a_{n+1} - a_n - 2d_n = a_n - a_{n-1}$   

          把这n个式子累加,得到

         $a_0 - a_1 + a_{n+1} - a_n - 2 * sum^{n}_{i = 1}d_i  = 0$       ··· (2)

          由式(1)可得

         $a_{n+1} - a_n - 2d_n= a_n - a_{n-1}$    

      代入(2)可得代入                      

         $ a_0 - a_1 + a_n - a_{n-1} - 2 *sum^{n-1}_{i = 1}d_i=0$        ··· (3)

          重复,得到:

        $a_0 - a_1 + a_2 - a_1 - 2d_1 = 0$          ··· (n+1)

          将式(2)加到式子(n+1),得:

        $a_1=frac{n*a_0 + a_{n+1} - 2 * n * d_1 - 2 * (n-1) * d_2 - ··· - 2 * d_n}{n+1}$

     

     代码:

     

     1 #include<cstdio>
     2 int main()
     3 {
     4     //freopen("data_in.txt", "r", stdin);
     5     //freopen("data_out.txt", "w", stdout);
     6     int n, i, T;
     7     double  a1, x, y, b[3010], c[3010], d[3010], sum;
     8     scanf("%d", &T);
     9     while(T--)
    10     {
    11         sum = 0.0;
    12         scanf("%d", &n);
    13         scanf("%lf%lf", &x, &y);
    14         for(i = 1; i <= n; i++)
    15         {
    16             scanf("%lf", &b[i]);
    17         }
    18         for(i = 1; i <= n; i++)
    19         {
    20             scanf("%lf", &c[i]);
    21             d[i] = b[i] - c[i];
    22         }
    23         for(i = 1; i <= n; i++)
    24         {
    25             sum += 2 * (n - i + 1) * d[i];
    26         }
    27         a1 = (n * x - sum + y) / ( n + 1);
    28         printf("%.2lf
    ", a1);
    29     }
    30 
    31     return 0;
    32 }
    View Code

     

     

     

     

  • 相关阅读:
    EF4.1中诡异的GUID为空问题
    asp.net mvc3 Razor引擎中@使用规则小记
    【推荐】JS面象对象编程视频教程
    【转】【More Effective C#】IEnumerable和IQueryable的那点事
    【你有更好的算法吗?】合并重叠时间段算法
    jquery处理textarea中的手动换行
    实例讲解遗传算法——基于遗传算法的自动组卷系统【理论篇】
    架设自己的NuGet服务器
    C#中用SelectSingleNode方法解析带有多个命名空间的XML文件
    解析入口参数为实体的表达式树
  • 原文地址:https://www.cnblogs.com/imLPT/p/4143967.html
Copyright © 2011-2022 走看看