首页 > 代码库 > UVa 10883 超级平均数(二项式系数+对数计算)

UVa 10883 超级平均数(二项式系数+对数计算)

https://vjudge.net/problem/UVA-10883

题意:

给出n个数,每相邻两个数求平均数,依次类推,最后得到1个数,求该数。

 

思路:

演算一下可以发现最后各个数的系数就是二项式系数。

但是n太大,直接计算会溢出。

所以,这里要用对数计算。(cmath中的log默认以e为底)

 1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<cstdio> 5 #include<vector> 6 #include<stack> 7 #include<queue> 8 #include<cmath> 9 #include<map>10 using namespace std;11 12 int n;13 14 int main()15 {16     //freopen("D:\\input.txt","r",stdin);17     int T;18     scanf("%d",&T);19     for(int kase=1;kase<=T;kase++)20     {21         scanf("%d",&n);22         double ans=0,c=0;23         for(int i=0;i<n;i++)24         {25             double x;26             scanf("%lf",&x);27             if(x>0)  ans+=exp(c+log(x)-(n-1)*log(2));28             else if(x<0)  ans-=exp(c+log(-x)-(n-1)*log(2));29             c=c+log(n-i-1)-log(i+1);30         }31         printf("Case #%d: %.3f\n",kase,ans);32     }33     return 0;34 }

 

UVa 10883 超级平均数(二项式系数+对数计算)