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;
}


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

java语言实现杨辉三角的主要思路和代码

本人其实一开始不会编写这个杨辉三角,没啥思路,网上百度了一下,了解了大体思路,然后自己编写的,主要思想已经清楚了,首先就是给数组赋值,然后就是打印数组,赋值的关键点有一个开始的赋值判断,还有就是如何递...
  • gorilla574664557
  • gorilla574664557
  • 2015年04月29日 09:30
  • 9370

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

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

跟着小白学~如何使用二维数组打印杨辉三角

今天我给大家带来的知识是“杨辉三角”,可能有些朋友听说过,没听说过的不要紧,就算同是身为小白的你看完本篇文章,也是可以敲出 杨辉三角的代码~~     那么我先来给大家介绍下什么是 "杨辉三角" : ...
  • qq1723205668
  • qq1723205668
  • 2016年06月07日 20:41
  • 1731

UVa10883 Supermean

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

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

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

Java数组的应用:案例:杨辉三角,三维数组,字符串数组

//import java.util.Arrays; //包含Arrays //import java.util.Random; public class HelloWorld { public ...
  • morixinguan
  • morixinguan
  • 2016年08月18日 16:32
  • 1163

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

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

第三章:队列及其应用之一---输出杨辉三角

#include #include string.h> #define N 100 #define OK 1 #define ERROR 0 int f[N]={0,1,1,0}; //...
  • Songjs19931206
  • Songjs19931206
  • 2015年01月05日 13:00
  • 466

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

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

输出杨辉三角 队列小应用

学习队列,一个小题目是输出杨辉三角   import java.util.ArrayDeque; import java.util.Queue; public class Mapd...
  • sujudz
  • sujudz
  • 2012年09月18日 22:36
  • 2184
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:uva10883 - Supermean-杨辉三角+log应用
举报原因:
原因补充:

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