uva10883 - Supermean-杨辉三角+log应用

原创 2016年08月29日 15:21:59

 题意: 给出n个数字, 要求你求出它们的supermean, supermean的定义是: n个数先两两相邻

        求平均值, 那么得到n-1个数, 已知循环做这件事, 直到剩下的数字只有1个


 

可以比较容易推导出  最后的ans= 每一项之和,其中通项为 C【i】*Ai /2^(n-1)

Ci是 C(n-1,i)也就是杨辉三角第n-1行的第i个


由于n太大了,直接算CI和2^n 都是不行的,由于答案是浮点的,我们可以利用log函数降次

根据组合数递推的公式              log_ci=log_ci+log(n-1-i)-log(i+1); 可以累推出ci

计算每一项,则先对其取对数,降次,最后再取回指数。

  if(x>0)
            ans+=   exp(  log_ci+log(x) -log2_n) ;
             else ans-= exp(  log_ci+log(-x) -log2_n) ;


#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <iostream>
using namespace std;
typedef long long   ll;
const int maxn=490000+5;

int main()
{
    //cout<<log(2.7182818284590452353602874713527)<<endl;
    //  printf("%lf\n",C(5000,3000));
    int t;
    cin>>t;
    int cnt=1;
    while(t--)
    {
        int n;
        scanf("%d",&n);
        double log2_n=(n-1)*log(2.0);
        double ans=0;
        double x;
        double log_ci=log(1);
        for (int i=0; i<n; i++)
        {
            scanf("%lf",&x);
            if(x>0)
            ans+=   exp(  log_ci+log(x) -log2_n) ;
             else ans-= exp(  log_ci+log(-x) -log2_n) ;
             log_ci=log_ci+log(n-1-i)-log(i+1);
        }
        printf("Case #%d: %.3lf\n",cnt++,ans );
    }

    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

UVa10883 Supermean

这道题开始没有注意越界问题,当 n = 5000 是取组合数非常大,而 2^n 也非常大,需要用自然对数处理一下才能处理 C(N,K)*A[k]/2^N 的求值,而且取对数的时候要分正负零各种情形考虑...

uva1635(唯一分解定理,杨辉三角二项式递推公式)

/* translation: 题意见lrj,p320 solution: 唯一分解定理,杨辉三角迭代公式 根据杨辉三角的迭代公式即可很容易得出最后一项的每一项系数。根据是否能够整除m,就可以...

队列的简单应用-杨辉三角和约瑟夫环

接上一篇,由于队列的内容相对比较简单,所以这次举两个实际的问题—杨辉三角和约瑟夫环。(不知道这两个问题的童鞋可以自行百度。) 先看杨辉三角。使用队列解决这个问题有1个小的技巧:第一就是在两个1的两边...

队列的应用—输出杨辉三角

#include"Queue.h" #include using namespace std; const int total_row = 6; void main() { void Pascal_...
  • ZLhy_
  • ZLhy_
  • 2013年01月26日 23:08
  • 5129

【数据结构队列的应用】用队列打印杨辉三角

数学中的杨辉三角大家都不陌生,那怎样用程序的方式求n行的杨辉三角呢?方法很多,队列就是其中的一种。下面给出基于队列实现的杨辉三角。 # include # define M 100 typedef ...
  • htq__
  • htq__
  • 2016年03月12日 11:00
  • 1918

输出杨辉三角 队列小应用

学习队列,一个小题目是输出杨辉三角   import java.util.ArrayDeque; import java.util.Queue; public class Mapd...
  • sujudz
  • sujudz
  • 2012年09月18日 22:36
  • 2151

杨辉三角——队列的应用

杨辉三角、队列

队列应用之打印杨辉三角_legend

(1)图解: (2)代码实现: #include using namespace std; /* 打印杨辉三角; 杨辉三角如:       1     1   1   1 ...

杨辉三角五种解法

  • 2017年11月13日 12:56
  • 3KB
  • 下载

Python语言实现杨辉三角

  • 2017年07月23日 18:24
  • 841B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:uva10883 - Supermean-杨辉三角+log应用
举报原因:
原因补充:

(最多只允许输入30个字)