题目大意:给出n个数,每相邻两个数求平均数,得到n-1个数,再求平均数,得到n-2个数,......一直到最后一个数,输出这个数。

题目很简单,就是中间数据会比较大有点复杂,超过double的范围,而结果又比较小,这时候可以考虑只存储中间数据的log值,改乘除运算为对数的加减运算,然后对结果求幂即可,需要注意的一点是负数不能取对数,先提取负号。

很容易得到:ans=sum(C(n-1,i)*a[i])/(2^(n-1)) , i=0~n-1;

提前将c(n-1,i)的值求出,log_C存储对数:log_C[i]=log_C[i-1]+log10(n-i)-log10(i);

由于无法将log(sum(C(n-1,i)*a[i]))分解,可以求出每个log(C(n-1,i)*a[i]/(2^(n-1)))再求和。

for (int i=0;i<n;++i)
  if (a[i]<0)
    ans-=pow(10,log_C[i]+log10(-a[i])-log10(2)*(n-1));
  else
    ans+=pow(10,log_C[i]+log10(a[i])-log10(2)*(n-1));

代码如下:

/*************************************************************************
> File Name: 10883.cpp
> Author: Chierush
> Mail: qinxiaojie1@gmail.com
> Created Time: 2013年06月18日 星期二 23时50分42秒
************************************************************************/ #include <iostream>
#include <cstring>
#include <cstdlib>
#include <set>
#include <cstdio>
#include <string>
#include <vector>
#include <map>
#include <cmath>
#include <algorithm> #define LL long long
#define LLU unsigned long long using namespace std; double log_C[50005],a[50005]; int main()
{
int n,T;
scanf("%d",&T);
for (int kcase=1;kcase<=T;++kcase)
{
scanf("%d",&n);
for (int i=0;i<n;++i)
scanf("%lf",&a[i]);
log_C[0]=log10(1);
for (int i=1;i<n;++i)
log_C[i]=log_C[i-1]+log10(n-i)-log10(i);//,printf("%lf %lf\n",log_C[i],pow(10,log_C[i]));
double ans=0.0;
for (int i=0;i<n;++i)
if (a[i]<0)
ans-=pow(10,log_C[i]+log10(-a[i])-log10(2)*(n-1));
else
ans+=pow(10,log_C[i]+log10(a[i])-log10(2)*(n-1));
printf("Case #%d: %.3lf\n",kcase,ans);
}
return 0;
}

  

最新文章

  1. 【腾讯Bugly干货分享】基于RxJava的一种MVP实现
  2. Assertor用于判断参数和抛出异常
  3. linux磁盘读写性能优化
  4. Microsoft 2013 新技术学习笔记 三
  5. HDU2196computer(树上最远距离 + DP)
  6. uva580Critical Mass
  7. 基于ProGuard-Maven-Plugin的自定义代码混淆插件
  8. CakePHP 2.x 升级3.0
  9. 官网下载旧版本的Xcode
  10. iOS基础 - iOS程序启动原理
  11. HDU2579--Dating with girls(2)--(DFS, 判重)
  12. Go基础篇【第5篇】: 内置库模块 exec
  13. 为什么《Dive into Python》不值得推荐
  14. C# 中的线程安全集合类
  15. JavaScript权威指南--数组Array
  16. Redis 配置内容总结
  17. 官方Canvas API文档
  18. day 023-python 包
  19. sql server 查询分析器中表名无效,有红线,其实是这张表的
  20. .aspx(或.asp)文件与.html(.htm)文件的区别与联系

热门文章

  1. 【16.67%】【codeforces 667C】Reberland Linguistics
  2. express笔记
  3. abmr:块恢复特性测试自己主动
  4. Vue插件资料
  5. jQuery分离构造器
  6. libuv 中文编程指南
  7. 2 abp 领域层创建实体
  8. SecureCRT 专题
  9. Harden the Hacker Thinking (Updating)
  10. 【C++】【TinyXml】xml文件的读写功能使用——写xml文件