ACM--数学--HDOJ 2086--A1 = ?

HDOJ题目地址:传送门

A1 = ?

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 6965    Accepted Submission(s): 4330

Problem 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

1
50.00
25.00
10.00
2
50.00
25.00
10.00
20.00

Sample Output

27.50
15.00

因为: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. =>   (n+1)A1 = nA0 + An+1 - 2(nC1+(n-1)C2+...+2Cn-1+Cn)
  17. =>   A1 = [nA0 + An+1 - 2(nC1+(n-1)C2+...+2Cn-1+Cn)]/(n+1)
#include <iostream>
#include <cstdio>
using namespace std;
int main (){
      int i,j,n;
      double sum;
      while (scanf("%d",&n)!=EOF){
         sum=0;
         double a[3500],c[3500],d;
         scanf("%lf%lf",&a[0],&a[n+1]);
         for (i=1; i<=n; i++)
             scanf("%lf",&c[i]);
         a[1]=n*a[0]+a[n+1];
         for (i = n, j = 1; i >=1&&j <= n; j++,i--)
             sum += i*c[j];
         a[1] = (a[1] - 2*sum)/(n+1);
         printf ("%.2lf\n",a[1]);
     }
     return 0;
 }
时间: 2024-11-05 12:37:24

ACM--数学--HDOJ 2086--A1 = ?的相关文章

ACM数学知识体系

#include<iostream> #include<string> #include<stack> using namespace std; #define n 8 stack <int *> s; int * createMaze(){//初始化迷宫 int i,j; int * a; a=new int[n*n]; for(i=0;i<n;i++){ for(j=0;j<n;j++){ *(a+n*i+j)=-1;//不设置为0的原因是超

题解报告:hdu 2086 A1 = ?

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2086 Problem 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

HDU 2086 A1 = ?

A1 = ? Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6492    Accepted Submission(s): 4038 Problem Description 有如下方程:Ai = (Ai-1 + Ai+1)/2 - Ci (i = 1, 2, 3, .... n). 若给出A0, An+1, 和 C1, C2, ...

ACM数学(转)

从放暑假前周sir给我讲了一个用polya计数法和burnside定理做的题目(pku2409)后,突然觉得组合数学挺有意思,然后从那时起到现在几乎都在做这类的题目. 做到现在感觉这类题目的一些基本知识点都差不多有所了解了,水题也刷了不少,但还有很多难题自己实在是做不动,所以准备把这类题目先放一放,然后把前段时间做的水题整理一下(供以后的初学者参考,大牛就不要看了哈,都是水题).剩下的比较难的题目就慢慢来吧,以后做出来再不上,这个小结会不断地更新.也希望大家有好的题目可以推荐一下,分享一下哈.

数学 HDOJ 5301 Buildings

题目传送门 1 /* 2 题意:n*m列的矩阵,删除一个格子x,y.用矩形来填充矩阵.且矩形至少有一边是在矩阵的边缘上. 3 求满足条件的矩形填充方式中面积最大的矩形,要使得该最大矩形的面积最小. 4 分析:任何矩形都可以分为宽度为1的小矩形,所以只考虑矩形的可以的最小长度即可. 5 讨论方法:这里 (我不会...) 6 */ 7 #include <cstdio> 8 #include <algorithm> 9 #include <cstring> 10 using

hdu 2086 A1 = ? (公式推导)

有如下方程: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位小数). 思路: 推公式: 首先,

hdu 2086 A1 = ?(数学题)

分析:(来自大神的博客) 因为: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) =>    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+

2046 ACM 数学

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2046 思维:与之前有两道题目相似,n可以由n-1和n-2递推过来.f(n)=f(n-1)*1+f(n-2)*1. 也可以在草稿纸上直接画,寻找各项之间的规律.规律很明显. code: #include <iostream> using namespace std; int main() { int n; long long u[51]; while (cin >> n) { u[0] =

acm数学(待续)

意图写出http://www.cnblogs.com/kuangbin/archive/2012/08/28/2661066.html这个东西的完善版. 1.置换,置换的运算 poj 2369 Permutations置换群中有一个定理:设T为一置换,e为单位置换,T^k=e,那么k的最小正整数解是T的拆分的所有循环长度的最小公倍数. 1 #include <cstdio> 2 const int maxn = 1005; 3 int gcd(int a,int b){return b ==

ACM 数学

欧几里得辗转相除法求最大公约数 int gcd(int a,int b) { if(b==0) return a; else return gcd(b,a%b); } 求组合数 int C(int n ,int m) { int i,a,fz=1,fm=1; for( i = 1; i <= m ;i++) { fz*=(n-i+1); fm*=i; a = gcd(fz,fm); fz/=a; fm/=a; } return fz/fm; } 错排公式 D(n) = (n-1) [D(n-2)