题目:戳这里

思路来源:视频讲解

题意:有n个箱子按1...n标号,每个箱子有大小为di的钻石概率为pi,我们初始有个大小为0的钻石,从1到n按顺序打开箱子,遇到比手中大的箱子就换,求交换次数的数学期望。

解题思路:这题跟上题[点这里]很像,都是找到一个子状态,利用数学期望的可加性,处理求和即可。这里的子状态为每一次交换的状态,即

前j个比i大的概率积用树状数组维护。

附ac代码:

  1. 1 #include <cstdio>
  2. 2 #include <cstdlib>
  3. 3 #include <iostream>
  4. 4 #include <cstring>
  5. 5 #include <algorithm>
  6. 6 #include <cmath>
  7. 7 #include <queue>
  8. 8 #include <vector>
  9. 9 #include <string>
  10. 10 #include <map>
  11. 11 #include <set>
  12. 12 using namespace std;
  13. 13 typedef long long ll;
  14. 14 const ll mod = 998244353;
  15. 15 const int maxn = 1e5 + 10;
  16. 16 int n;
  17. 17 struct nod
  18. 18 {
  19. 19 int id;
  20. 20 ll d;
  21. 21 ll p;
  22. 22 }bx[maxn];
  23. 23 bool cmp(nod a, nod b)
  24. 24 {
  25. 25 if(a.d > b.d) return 1;
  26. 26 else if(a.d == b.d && a.id < b.id) return 1;
  27. 27 return 0;
  28. 28 }
  29. 29 ll pmul(ll a, ll b)
  30. 30 {
  31. 31 ll res = 0;
  32. 32 while(b)
  33. 33 {
  34. 34 if(b&1)
  35. 35 res = (res + a) % mod;
  36. 36 b >>= 1;
  37. 37 a = (a + a) % mod;
  38. 38 }
  39. 39 return res;
  40. 40 }
  41. 41 ll pmod(ll a, ll b)
  42. 42 {
  43. 43 ll res = 1;
  44. 44 while(b)
  45. 45 {
  46. 46 if(b&1)
  47. 47 res = pmul(res, a) % mod;
  48. 48 b >>= 1;
  49. 49 a = pmul(a, a) % mod;
  50. 50 }
  51. 51 return res;
  52. 52 }
  53. 53 ll exgcd(ll a, ll b, ll &x, ll &y)
  54. 54 {
  55. 55 if(a == 0 && b == 0) return -1;
  56. 56 if(b == 0)
  57. 57 {
  58. 58 x = 1;y = 0;
  59. 59 return a;
  60. 60 }
  61. 61 ll d = exgcd(b, a % b, y, x);
  62. 62 y -= a/b*x;
  63. 63 return d;
  64. 64 }
  65. 65 ll mod_rev(ll a, ll n)
  66. 66 {
  67. 67 ll x, y;
  68. 68 ll d = exgcd(a, n, x, y);
  69. 69 if(d == 1) return (x % n + n) % n;
  70. 70 else return -1;
  71. 71 }
  72. 72 int lowbit(int x)
  73. 73 {
  74. 74 return x&(-x);
  75. 75 }
  76. 76 ll c[maxn * 4];
  77. 77 ll getm(int i)
  78. 78 {
  79. 79 ll s = 1;
  80. 80 while(i > 0)
  81. 81 {
  82. 82 s = pmul(s , c[i]) % mod;
  83. 83 i -= lowbit(i);
  84. 84 }
  85. 85 return s;
  86. 86 }
  87. 87 void add(int i, ll val)
  88. 88 {
  89. 89 while(i <= n)
  90. 90 {
  91. 91 c[i] = pmul(c[i], val) %mod;
  92. 92 i += lowbit(i);
  93. 93 }
  94. 94 }
  95. 95 int main()
  96. 96 {
  97. 97
  98. 98 ll inv = mod_rev(100ll, mod);
  99. 99 // printf("%lld\n", inv);
  100. 100 scanf("%d", &n);
  101. 101 for(int i = 0; i < maxn; ++i)
  102. 102 c[i] = 1;
  103. 103 for(int i = 1; i <= n; ++i)
  104. 104 {
  105. 105 scanf("%lld %lld", &bx[i].p, &bx[i].d);
  106. 106 bx[i].id = i;
  107. 107 }
  108. 108 sort(bx + 1, bx + 1 + n, cmp);
  109. 109
  110. 110 ll ans = 0;
  111. 111 for(int i = 1; i <= n; ++i)
  112. 112 {
  113. 113 // printf("%lld\n", getm(bx[i].id));
  114. 114 //printf("%lld %lld %d\n", bx[i].p, bx[i].d, bx[i].id);
  115. 115 ans = (ans + getm(bx[i].id) * bx[i].p % mod * inv % mod) % mod;
  116. 116 add(bx[i].id, ((100 - bx[i].p) * inv) % mod);
  117. 117 }
  118. 118 printf("%lld\n", ans);
  119. 119 }

牛客网多校第5场 F take 【思维+数学期望】的更多相关文章

  1. 牛客网多校训练第一场 F - Sum of Maximum(容斥原理 + 拉格朗日插值法)

    链接: https://www.nowcoder.com/acm/contest/139/F 题意: 分析: 转载自:http://tokitsukaze.live/2018/07/19/2018ni ...

  2. 牛客网多校第3场C-shuffle card 平衡树或stl(rope)

    链接:https://www.nowcoder.com/acm/contest/141/C 来源:牛客网 题目描述 Eddy likes to play cards game since there ...

  3. 牛客网多校第3场Esort string (kmp)

    链接:https://www.nowcoder.com/acm/contest/141/E 来源:牛客网 题目描述 Eddy likes to play with string which is a ...

  4. 牛客网多校赛第九场A-circulant matrix【数论】

    链接:https://www.nowcoder.com/acm/contest/147/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

  5. 牛客网多校训练第二场D Kth Minimum Clique

    链接:https://ac.nowcoder.com/acm/contest/882/D来源:牛客网 Given a vertex-weighted graph with N vertices, fi ...

  6. 牛客网多校第5场 H subseq 【树状数组+离散化】

    题目:戳这里 学习博客:戳这里 题意:给n个数为a1~an,找到字典序第k小的序列,输出该序列所有数所在位置. 解题思路:先把所有序列预处理出来,方法是设一个数组为dp,dp[i]表示以i为开头的序列 ...

  7. 牛客网多校第5场 I vcd 【树状数组+离散化处理】【非原创】

    题目:戳这里 学习博客:戳这里 作者:阿狸是狐狸啦 n个点,一个点集S是好的,当且仅当对于他的每个子集T,存在一个右边无限延长的矩形,使的这个矩形包含了T,但是和S-T没有交集. 求有多少个这种集合. ...

  8. 牛客网多校第4场 J Hash Function 【思维+并查集建边】

    题目链接:戳这里 学习博客:戳这里 题意: 有n个空位,给一个数x,如果x%n位数空的,就把x放上去,如果不是空的,就看(x+1)%n是不是空的. 现在给一个已经放过数的状态,求放数字的顺序.(要求字 ...

  9. 牛客网多校第4场 A.Ternary String 【欧拉降幂】

    题目:戳这里 学习博客:戳这里 欧拉函数的性质: ① N是不为0的整数.φ(1)=1(唯一和1互质的数就是1本身) ② 除了N=2,φ(N)都是偶数. ③ 小于N且与N互质的所有数的和是φ(n)*n/ ...

随机推荐

  1. Java自学笔记之学生管理系统

    实现:学生管理系统,实现学生信息的添加.修改.查询和删除功能 涉及:集合的基础知识(集合遍历,值得获取与替换,set/get方法) 代码如下: Student文件 1 package Demo_120 ...

  2. PAT Advanced 1004 Counting Leaves

    题目与翻译 1004 Counting Leaves 数树叶 (30分) A family hierarchy is usually presented by a pedigree tree. You ...

  3. 查看内核打印信息指令dmesg

    linux系统启动的时候打印的的信息非常重要,有时候需要看这些信息但是又不想重启,可以用dmesg这条指令.

  4. LR_添加系统资源监控失败

    1.服务开启情况:RPC.Rmote Resgistry.Network DDE.Server.Workstation.Network connection以上服务是否已开启 2.是否开了防火墙,如有 ...

  5. 在QML 中用javascritpt 将中文转换拼音,可以在音标

    项目需要, 今天整理了一下.在QML调用javascrit将中文汉字转换成拼音. 感觉执行效率低.下面是主要代码. 具体代码请参考QMLPinyin 代码 ```import "./piny ...

  6. TCP/IP网络中的显式拥塞通告(ECN)

    当前的TCP 实现将TCP 端节点之间的中间网络视为一个不透明的"黑盒".TCP 包进入和流出这个盒子.有些时候进入盒子的包被丢失了.因为今天的数字和光媒体上出现比特级错误的机会非 ...

  7. 省选复习 - LCT 笔记

    目录 LCT 笔记 主要功能 和其它数据结构的比较 思想 虚实剖分 如何维护所有的链 实链 虚边 开始构思 具体要维护的功能(从基础到高级) Splay部分 access(u) make(u) fin ...

  8. Horde Groupware Webmail Edition 远程命令执行

    saturn:~ mr_me$ ./poc.py (+) usage ./poc.py <target> <path> <user:pass> <connec ...

  9. 2019牛客多校第三场D-Big Integer

    题意 定义\(A(n)\) 为 n个1表示的十进制数,例如\(A(3) = 111\) 然后对于\(1 \le i \le n,1\le j \le m\) 问有多少的 \(pairs(i,j)\)满 ...

  10. codeforces#244(div.2) C

    动漫节一游回来之后一直处于一种意识模糊的状态 看到大家都陆陆续续地过了C心里还是有点着急(自己没思路啊囧) 其实当时就在想该如何找到DFS中的一个环,然后再找到环路上最小的一个值 把所有环路上最小的值 ...