uva10883 - Supermean-杨辉三角+log应用
来源:互联网 发布:电子书软件哪个好 编辑:程序博客网 时间:2024/06/07 18:29
题意: 给出n个数字, 要求你求出它们的supermean, supermean的定义是: n个数先两两相邻
可以比较容易推导出 最后的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;}
0 0
- uva10883 - Supermean-杨辉三角+log应用
- uva10883 - Supermean 杨辉三角
- UVa10883 Supermean
- UVa10883 Supermean
- UVA10883 Supermean
- UVa 10883 - Supermean (杨辉三角 通过取对数解决大数除大数)
- uva10883
- UVa 10883 Supermean(log压缩)
- 输出杨辉三角 队列小应用
- 队列在杨辉三角中的应用
- 杨辉三角/帕斯卡三角
- 队列的简单应用-杨辉三角和约瑟夫环
- 队列的应用—输出杨辉三角
- 队列应用之打印杨辉三角_legend
- 第三章:队列及其应用之一---输出杨辉三角
- 二维数组的应用之杨辉三角
- 【数据结构队列的应用】用队列打印杨辉三角
- 杨辉三角——队列的应用
- Redis的持久化方式
- C. K-special Tables【构造】水
- Block简单介绍
- QT中mysql数据库的使用
- 直观判断图像是否可以被实时处理
- uva10883 - Supermean-杨辉三角+log应用
- 1015. Reversible Primes (20)
- java 集合概述
- git撤销修改各种情况
- 查看端口是否能启用
- boost之路 十四 数据结构
- 2016app上架的那些事
- Set font size and color in GUI.Label
- 【框架】[Hibernate]利用Hibernate进行单表的增删改查-Web实例