NOIP提高组模拟 幻象
2016-09-04 15:23
176 查看
Description
phantom是一位爱思考的哲♂学家。最近phantom得到了森の妖精的真传。在他练功的时候, 每秒他的思绪中都有一定的概率浮现出奇♂异的幻象,持续x秒的幻象将产生x^2的幻象值。phantom练功发自真心,他想知道,在N秒内他期望产生的幻象值是多少。
Data Constraint
对于 40%的数据 N ≤ 10
对于 60%的数据 N ≤ 100
对于 100%的数据,N ≤ 10^6
数据规模较大,请使用效率较高的读入方式。
Solution
对于这种概率题,一看数据范围就知道只能O(N),我们考虑dp。设 L[i]为第 i 秒幻象的持续时间的期望。显然 L[i] = (L[i-1] + 1) * a[i]%。设 f[i]表示前 i 秒的答案,那么 f[i] = f[i-1] + ((L[i−1]+1)2– L[i−1]2) * a[i]%。我们这样想,对于一次转移,显然f[i-1]是的答案内包含了跳L[i-1]步,而现在你由跳L[i-1]步改为跳L[i-1]+1步,这样的话对于f[i]你必须先减去原来f[i-1]中L[i−1]2带来的幻象值,才能加上(L[i−1]+1)2的幻象值。程序时间复杂度为 O(N)。
代码
#include<iostream> #include<cmath> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; const int maxn=1000005; double f[maxn],l[maxn],a[maxn]; int n,i,t,j,k; double sqr(double x){ return x*x; } int main(){ scanf("%d",&n); for (i=1;i<=n;i++){ scanf("%lf",&a[i]); l[i]=(l[i-1]+1)*a[i]/100; f[i]=f[i-1]+(sqr(l[i-1]+1)-sqr(l[i-1]))*a[i]/100; } printf("%.1lf",f ); }
相关文章推荐
- Oracle触发器详解
- poj 3155 01规划->最大密度密度子图->最大流
- 流程控制--if条件
- Android -- java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
- 1.4.3节练习
- JavaScript hasOwnProperty() 函数详解
- [http] 请求与常见状态码
- 迷宫问题
- 陶哲轩实分析 6.3 节习题试解
- Linux中如何读写硬盘上指定物理扇区
- 华为校招第三题:字符串变换最小费用(动态规划DP问题)
- 小试ES6:异步编程之Generator
- 陶哲轩实分析 6.3 节习题试解
- Leetcode--3Sum
- 使用videoview播放视频
- 微信客户端+微信公众平台+新浪云SAE+Arduino+WS100(控制LED)
- 微服务架构的基础框架选择:Spring Cloud还是Dubbo
- 点击图片选定区域跳转到连接地
- 快速排序以及输出展示
- 39. 事件