1. /*
  2. dp维护整体的概率, 每次相当于回退一格然后重新dp一格
  3. */
  4. #include<cstdio>
  5. #include<algorithm>
  6. #include<iostream>
  7. #include<cstring>
  8. #include<queue>
  9. #define ll long long
  10. #define M 202
  11. #define mmp make_pair
  12. using namespace std;
  13. int read()
  14. {
  15. int nm = 0, f = 1;
  16. char c = getchar();
  17. for(; !isdigit(c); c = getchar()) if(c == '-') f = -1;
  18. for(; isdigit(c); c = getchar()) nm = nm * 10 + c - '0';
  19. return nm * f;
  20. }
  21. const int mod = 1000000007;
  22. int poww(int a, int b)
  23. {
  24. int ans = 1, tmp = a;
  25. for(; b; b >>= 1, tmp = 1ll * tmp * tmp % mod) if(b & 1) ans = 1ll * ans * tmp % mod;
  26. return ans;
  27. }
  28. void add(int &x, int y)
  29. {
  30. x += y;
  31. x -= x >= mod ? mod : 0;
  32. x += x < 0 ? mod : 0;
  33. }
  34. struct Note
  35. {
  36. int a, g, p;
  37. bool operator < (const Note &b) const
  38. {
  39. return this->a < b.a;
  40. }
  41. }note[M][M], sta[M * M];
  42. int m[M], q[M], n, v[M], tp;
  43. int f[M], g[M], d[M], ans[M];
  44. void work(int x)
  45. {
  46. if(x == 0)
  47. {
  48. for(int i = 0; i <= n; i++) g[i] = g[i + 1];
  49. return;
  50. }
  51. int y = (1 + mod - x), invx = poww(x, mod - 2);
  52. memset(d, 0, sizeof(d));
  53. for(int i = 0; i <= n; i++)
  54. {
  55. d[i] = 1ll * g[i] * invx % mod;
  56. add(g[i + 1], -1ll * d[i] * y % mod);
  57. }
  58. for(int i = 0; i <= n; i++) g[i] = d[i];
  59. }
  60. int main()
  61. {
  62. n = read();
  63. int inv = poww(100 ,mod - 2);
  64. for(int i = 1; i <= n; i++)
  65. {
  66. m[i] = read();
  67. for(int j = 1; j <= m[i]; j++)
  68. {
  69. note[i][j].a = read(), note[i][j].g = 1ll * (100 - read()) * inv % mod, note[i][j].p = read();
  70. add(q[i], note[i][j].p);
  71. sta[++tp] = (Note) {note[i][j].a, i, j};
  72. }
  73. int inv = poww(q[i], mod - 2);
  74. for(int j = 1; j <= m[i]; j++) note[i][j].p = 1ll * note[i][j].p * inv % mod;
  75. }
  76. sort(sta + 1, sta + tp + 1);
  77. for(int i = 1; i <= n; i++) v[i] = read();
  78. g[n] = 1;
  79. for(int now = 1; now <= tp; now++)
  80. {
  81. int i = sta[now].g, j = sta[now].p;
  82. work(f[i]);
  83. for(int a = 0; a <= n; a++) add(ans[i], 1ll * note[i][j].p * v[a + 1] % mod * g[a] % mod * note[i][j].g % mod);
  84. add(f[i], note[i][j].p);
  85. for(int a = n; a >= 0; a--)
  86. {
  87. g[a] = 1ll * g[a] * f[i] % mod;
  88. if(a) add(g[a], 1ll * (1 + mod - f[i]) * g[a - 1] % mod);
  89. }
  90. }
  91. for(int i = 1; i <= n; i++) cout << ans[i] << "\n";
  92. return 0;
  93. }

十二省NOI“省选”联考模测(第二场)A抽卡大赛的更多相关文章

  1. 51nod 1850 抽卡大赛 (十二省联考模测) DP

    O(n4)O(n^4)O(n4)的DP很好想,但是过不了.来看看O(n3)O(n^3)O(n3)的把. Freopen的博客 CODE #include <cstdio> #include ...

  2. 51nod“省选”模测第二场 C 小朋友的笑话(线段树 set)

    题意 题目链接 Sol 直接拿set维护\(li\)连续段.因为set内的区间互不相交,而且每个线段会被至多加入删除一次,所以复杂度是对的. #include<bits/stdc++.h> ...

  3. 51nod“省选”模测第二场 B 异或约数和(数论分块)

    题意 题目链接 Sol 这题是来搞笑的吧.. 考虑一个数的贡献是\(O(\frac{N}{i})\) 直接数论分块. #include<bits/stdc++.h> #define Pai ...

  4. 题解 P6622 [省选联考 2020 A/B 卷] 信号传递

    洛谷 P6622 [省选联考 2020 A/B 卷] 信号传递 题解 某次模拟赛的T2,考场上懒得想正解 (其实是不会QAQ), 打了个暴力就骗了\(30pts\) 就火速溜了,参考了一下某位强者的题 ...

  5. [省选联考 2020 A 卷] 组合数问题

    题意 [省选联考 2020 A 卷] 组合数问题 想法 自己在多项式和数论方面还是太差了,最近写这些题都没多少思路,看完题解才会 首先有这两个柿子 \(k*\dbinom{n}{k} = n*\dbi ...

  6. [省选联考 2021 A 卷] 矩阵游戏

    很巧妙的一个构造. 我是没有想到的. 自己的思维能力可能还是不足. 考虑先满足\(b\)对\(a\)的限制,把\(a\)的第一行和第一列设\(0\),推出这个\(a\). 接下来考虑对这个\(a\), ...

  7. [省选联考 2021 A/B 卷] 卡牌游戏

    垃圾福建垫底选手来看看这题. 大家怎么都写带 \(log\) 的. 我来说一个线性做法好了. 那么我们考虑枚举 \(k\) 作为翻转完的最小值. 那么构造出一个满足条件的操作,我们在 \(a_i\) ...

  8. luoguP6622 [省选联考 2020 A/B 卷] 信号传递(状压dp)

    luoguP6622 [省选联考 2020 A/B 卷] 信号传递(状压dp) Luogu 题外话: 我可能是傻逼, 但不管我是不是傻逼, 我永远单挑出题人. 题解时间 看数据范围可以确定状压dp. ...

  9. luoguP6623 [省选联考 2020 A 卷] 树(trie树)

    luoguP6623 [省选联考 2020 A 卷] 树(trie树) Luogu 题外话: ...想不出来啥好说的了. 我认识的人基本都切这道题了. 就我只会10分暴力. 我是傻逼. 题解时间 先不 ...

随机推荐

  1. Spring技术内幕总结 - IoC容器的实现

    IoC:Inversion of Control,控制反转,即依赖对象的获得被反转了(DI:dependency inversion,依赖注入)在Spring中,IoC容器是实现这个模式的载体.它可以 ...

  2. neutron通信原理理解

    compute: [root@compute01 ~]# ip add show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue ...

  3. Golang 操作mysql使用举例---连接本地数据库

    连接数据库的方式有两种:TCP和Unix域socket. 本文使用Unix domain sockets连接数据库.关于TCP连接数据库可以参考Go 操作mysql使用举例 下面例子中,演示了使用sh ...

  4. pyhanlp 中文词性标注与分词简介

    pyhanlp 中文词性标注与分词简介 pyhanlp实现的分词器有很多,同时pyhanlp获取hanlp中分词器也有两种方式 第一种是直接从封装好的hanlp类中获取,这种获取方式一共可以获取五种分 ...

  5. 优化sql用到的方法

    set statistics profile on set statistics io on set statistics time on declare @begin_date datetime d ...

  6. 关于JFame 屏幕居中显示的问题

    场景:    在利用 JAVA  的 Swing 开发 C/S 架构 的前端界面 目的:    想让 JFrame 居中显示在整个 屏幕的正中位置 方法一:JFrame frame = new JFr ...

  7. IDEA运行tomcat8.5.35源代码

    前提环境,安装和配置好java1.8+环境,maven,IDEA 1.下载Tomcat源代码:https://tomcat.apache.org/download-80.cgi#8.5.35 2.创建 ...

  8. 将mongo设置为windows的服务

    原文链接 https://mp.weixin.qq.com/s/rmWcvjZFJb3z_5M8UPWAPQ PHP的mongo扩展: 首先 下载一个PHP的mongo扩展, 地址:http://do ...

  9. 【Git】Git使用--常用命令

    查看所有分支 git branch -a 查看本地分支 git branch 切换分支 git checkout test demo git checkout release_1.3.1 (切换到re ...

  10. bzoj5011: [Jx2017]颜色

    Description 可怜有一个长度为n的正整数序列Ai,其中相同的正整数代表着相同的颜色. 现在可怜觉得这个序列太长了,于是她决定选择一些颜色把这些颜色的所有位置都删去. 删除颜色i可以定义为把所 ...