CodeForces 248E Piglet's Birthday (概率)
2016-07-17 16:05
351 查看
#include <iostream> #include <cstdio> #include <vector> #include <cstring> #include <cmath> using namespace std; #define N 100020 int n, a , aa ; int c ; long double p [120]; long double C(int a, int b) { long double ret = 1; for(int i = 1; i <= b; ++i) ret *= (a - i + 1.0) / i; return ret; } long double f(int a, int b, int c, int d) { if(a - b < c - d) return 0; if(a < b) return 0; return C(b, d) * C(a - b, c - d) / C(a, c); } int main() { scanf("%d", &n); long double ans = 0; for(int i = 1; i <= n; ++i) { scanf("%d", &a[i]); if(a[i] == 0) ans += 1; aa[i] = a[i]; p[i][a[i]] = 1; c[i] = a[i]; } int q; scanf("%d", &q); while(q--) { int u, v, k; scanf("%d%d%d", &u, &v, &k); ans -= p[u][0]; for(int i = 0; i <= aa[u]; ++i) { p[u][i] *= f(c[u], i, k, 0); for(int j = 1; i + j <= aa[u] && j <= k; ++j) { p[u][i] += p[u][i + j] * f(c[u], i + j, k, j); } } ans += p[u][0]; c[u] -= k; c[v] += k; printf("%.12lf\n", (double)ans); } return 0; }
相关文章推荐
- 数字在排序数组中出现的次数 java
- Service简单学习
- Java基础学习第一天
- 正则表达式语法以及常用
- 正则表达式语法以及常用
- 正则表达式语法以及常用
- 正则表达式语法以及常用
- 正则表达式语法以及常用
- Codeforces Round #271 (Div. 2) F Ant colony
- codeForces 574b Bear and Three Musketeers
- 翻翻git之---低内存损耗,简单易用的汉字->拼音转换库 TinyPinyin
- Leetcode-sum-root-to-leaf-numbers
- VB程序学习代码记录20160717
- rmi高可用的简单实现-zookeeper
- java-基础-变长参数
- VS2015 Update2 构建 Android 程序问题汇总
- strcpy和strncpy用法和区别
- poj-1284 欧拉函数
- jQuery Mobile 安装
- linux文件系统(二) - 虚拟文件系统