UVa 10883 超级平均数(二项式系数+对数计算)
Posted 谦谦君子,陌上其华
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 超级平均数(二项式系数+对数计算)的主要内容,如果未能解决你的问题,请参考以下文章