2016-icpc-qingdao

 ACM  概率  图论 󰈭 411字

参考说明:

added saltyfish/2016 ACM/ICPC Asia Regional Qingdao Onsite.page

Fibnacci


D 概率

 1double qp(double a, int p){
 2    double ans = 1;
 3    while(p){
 4        if(p & 1) ans *= a;
 5        a *= a; p >>= 1;
 6    }
 7    return ans;
 8}
 9
10int n;
11int num[20];
12double p[20], ans[20];
13
14//除了x硬币其余硬币活不到第k轮的概率
15double sove(int x, int k){
16    double ans = 1;
17    for(int i = 0; i < n; i++){
18        if(i == x) continue;
19        ans *= qp((1 - qp(p[i], k)), num[i]);
20    }
21    return ans;
22}
23
24int main(){
25//    Fastin;
26    int t; scanf("%d", &t); while(t--){
27        scanf("%d", &n);
28        fro(int i = 0; i < n; i++){
29            scanf("%d %lf", num + i, p + i);
30            ans[i] = 0;
31        }
32        if(n == 1) printf("1.000000\n");
33        else{
34            //实验100轮
35            for(int i = 1; i <= 100; i++) for(int x = 0; x < n; x++){
36                ans[x] += (sove(x, i) - sove(x, i - 1)) * (1 - qp((1 - qp(p[x], i)), num[x]));
37            }
38            for(int i = 0; i < n; i++){
39                printf("%.6f", ans[i]);
40                if(i != n - 1) printf(" ");
41                else printf("\n");
42            }
43        }
44    }
45    return 0;
46}

考虑所有三元组,图是若干个团之并的充要条件是不存在某个三元组中有两条边(实际上就是要满足传递性),于是任取一个有两条边的三元组,枚举加上剩下的边或者删除现有两条边之一,修改一条边之后会有$O(n)$个三元组受影响,暴力修改这些三元组,同时用一个队列+时间戳维护当前有两条边的三元组,搜$10$步即可,复杂度是$O(n^3+n3^{10})$

嗨! 这里是 rqdmap 的个人博客, 我正关注 GNU/Linux 桌面系统, Linux 内核, 后端开发, Python, Rust 以及一切有趣的计算机技术! 希望我的内容能对你有所帮助~
如果你遇到了任何问题, 包括但不限于: 博客内容说明不清楚或错误; 样式版面混乱等问题, 请通过邮箱 rqdmap@gmail.com 联系我!
修改记录:
  • 2023-09-01 18:14:49单独划分ACM专题; 移动部分博客进入黑洞归档
  • 2023-05-29 23:05:14大幅重构了python脚本的目录结构,实现了若干操作博客内容、sqlite的助手函数;修改原本的文本数 据库(ok)为sqlite数据库,通过嵌入front-matter的page_id将源文件与网页文件相关联
  • 2023-05-08 21:44:36博客架构修改升级
  • 2022-11-16 01:27:34迁移老博客文章内容
2016-icpc-qingdao