B - Supermean
来源:互联网 发布:淘宝联盟隐藏计划 编辑:程序博客网 时间:2024/05/18 03:24
很容易就可以看出来这是一个求将杨辉三角的系数乘以每一个数(已经是非递减的顺序),然后求平均数的题。
但是题目的要求有50000,显然暴力是不行的,虽然题目给出的时间是2s,但是求第50000个数时空间和时间的代价就太大了,不符合ACM的要求。
所以我们可以用取对数的方法进行求解。
公式 :1、log(C(n - 1, i) * a[i] / 2^(n - 1)) = log(C(n - 1, i)) + log(a[i]) - (n - 1) * log(2)
e^(ln C(n-1, k)*A[k]/(2^n-1) )==> e^( ln C(n-1,k) + ln A[k] - (n-1)*ln2 );
2、 C(n, k) = C(n, k-1)*(n-k+1)/k
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib>
using namespace std;
const int N=50005;
int n,t;
double a,c;
double cal(int i,double a) {
return c+log(a)-(n-1)*log(2);
}
int main() {
int cas=0;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
double sum=0;
c=0;
for(int i=0;i<n;i++){
scanf("%lf",&a);
if(a<0)sum-=exp(cal(i,-a));
else{
sum+=exp(cal(i,a));
}
c=c+log(n-i-1)-log(i+1);
}
printf("Case #%d: %.3lf\n",++cas,sum);
}
return 0;
}
- B - Supermean
- UVa10883 Supermean
- UVa10883 Supermean
- UVA10883 Supermean
- UVA - 10883 Supermean
- UVA - 10883 Supermean
- uva 10883 Supermean
- uva10883 - Supermean 杨辉三角
- uva 10883——Supermean
- UVa-10883 Supermean(二项式系数)
- UVA 10883 Supermean(组合,二项式系数,对数)
- Uva 10883 - Supermean 解题报告(对数)
- uva 10883 - Supermean(组合数学+数值优化)
- UVa 10883 Supermean(log压缩)
- uva10883 - Supermean-杨辉三角+log应用
- UVA 10883 - Supermean(组合数学+数值优化)
- UVA 10883 Supermean 上下取对数防溢出
- uva 10883 - Supermean( 找规律, log( c(n,m)) )
- 使用dmidecode命令查看硬件信息
- Centrex业务-群内呼叫
- JSP过滤器(Filter)之实现全站解决中文提交乱码(包括get提交方式)
- 前端判断手机访问还是浏览器访问 chrome不支持
- NSSet 和 NSArray 区别
- B - Supermean
- 明升收藏
- map排序
- JDBC连接数据库
- Unity3d Log信息,发布版自动消失
- 算法笔记(四) 鸡尾酒排序
- leetcode: Unique Binary Search Trees II
- Windows下Android开发环境配置
- PB 调用.NET COM组件(1)