牛客网多校第5场 F take 【思维+数学期望】
题目:戳这里
思路来源:视频讲解
题意:有n个箱子按1...n标号,每个箱子有大小为di的钻石概率为pi,我们初始有个大小为0的钻石,从1到n按顺序打开箱子,遇到比手中大的箱子就换,求交换次数的数学期望。
解题思路:这题跟上题[点这里]很像,都是找到一个子状态,利用数学期望的可加性,处理求和即可。这里的子状态为每一次交换的状态,即
前j个比i大的概率积用树状数组维护。
附ac代码:
- 1 #include <cstdio>
- 2 #include <cstdlib>
- 3 #include <iostream>
- 4 #include <cstring>
- 5 #include <algorithm>
- 6 #include <cmath>
- 7 #include <queue>
- 8 #include <vector>
- 9 #include <string>
- 10 #include <map>
- 11 #include <set>
- 12 using namespace std;
- 13 typedef long long ll;
- 14 const ll mod = 998244353;
- 15 const int maxn = 1e5 + 10;
- 16 int n;
- 17 struct nod
- 18 {
- 19 int id;
- 20 ll d;
- 21 ll p;
- 22 }bx[maxn];
- 23 bool cmp(nod a, nod b)
- 24 {
- 25 if(a.d > b.d) return 1;
- 26 else if(a.d == b.d && a.id < b.id) return 1;
- 27 return 0;
- 28 }
- 29 ll pmul(ll a, ll b)
- 30 {
- 31 ll res = 0;
- 32 while(b)
- 33 {
- 34 if(b&1)
- 35 res = (res + a) % mod;
- 36 b >>= 1;
- 37 a = (a + a) % mod;
- 38 }
- 39 return res;
- 40 }
- 41 ll pmod(ll a, ll b)
- 42 {
- 43 ll res = 1;
- 44 while(b)
- 45 {
- 46 if(b&1)
- 47 res = pmul(res, a) % mod;
- 48 b >>= 1;
- 49 a = pmul(a, a) % mod;
- 50 }
- 51 return res;
- 52 }
- 53 ll exgcd(ll a, ll b, ll &x, ll &y)
- 54 {
- 55 if(a == 0 && b == 0) return -1;
- 56 if(b == 0)
- 57 {
- 58 x = 1;y = 0;
- 59 return a;
- 60 }
- 61 ll d = exgcd(b, a % b, y, x);
- 62 y -= a/b*x;
- 63 return d;
- 64 }
- 65 ll mod_rev(ll a, ll n)
- 66 {
- 67 ll x, y;
- 68 ll d = exgcd(a, n, x, y);
- 69 if(d == 1) return (x % n + n) % n;
- 70 else return -1;
- 71 }
- 72 int lowbit(int x)
- 73 {
- 74 return x&(-x);
- 75 }
- 76 ll c[maxn * 4];
- 77 ll getm(int i)
- 78 {
- 79 ll s = 1;
- 80 while(i > 0)
- 81 {
- 82 s = pmul(s , c[i]) % mod;
- 83 i -= lowbit(i);
- 84 }
- 85 return s;
- 86 }
- 87 void add(int i, ll val)
- 88 {
- 89 while(i <= n)
- 90 {
- 91 c[i] = pmul(c[i], val) %mod;
- 92 i += lowbit(i);
- 93 }
- 94 }
- 95 int main()
- 96 {
- 97
- 98 ll inv = mod_rev(100ll, mod);
- 99 // printf("%lld\n", inv);
- 100 scanf("%d", &n);
- 101 for(int i = 0; i < maxn; ++i)
- 102 c[i] = 1;
- 103 for(int i = 1; i <= n; ++i)
- 104 {
- 105 scanf("%lld %lld", &bx[i].p, &bx[i].d);
- 106 bx[i].id = i;
- 107 }
- 108 sort(bx + 1, bx + 1 + n, cmp);
- 109
- 110 ll ans = 0;
- 111 for(int i = 1; i <= n; ++i)
- 112 {
- 113 // printf("%lld\n", getm(bx[i].id));
- 114 //printf("%lld %lld %d\n", bx[i].p, bx[i].d, bx[i].id);
- 115 ans = (ans + getm(bx[i].id) * bx[i].p % mod * inv % mod) % mod;
- 116 add(bx[i].id, ((100 - bx[i].p) * inv) % mod);
- 117 }
- 118 printf("%lld\n", ans);
- 119 }
牛客网多校第5场 F take 【思维+数学期望】的更多相关文章
- 牛客网多校训练第一场 F - Sum of Maximum(容斥原理 + 拉格朗日插值法)
链接: https://www.nowcoder.com/acm/contest/139/F 题意: 分析: 转载自:http://tokitsukaze.live/2018/07/19/2018ni ...
- 牛客网多校第3场C-shuffle card 平衡树或stl(rope)
链接:https://www.nowcoder.com/acm/contest/141/C 来源:牛客网 题目描述 Eddy likes to play cards game since there ...
- 牛客网多校第3场Esort string (kmp)
链接:https://www.nowcoder.com/acm/contest/141/E 来源:牛客网 题目描述 Eddy likes to play with string which is a ...
- 牛客网多校赛第九场A-circulant matrix【数论】
链接:https://www.nowcoder.com/acm/contest/147/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...
- 牛客网多校训练第二场D Kth Minimum Clique
链接:https://ac.nowcoder.com/acm/contest/882/D来源:牛客网 Given a vertex-weighted graph with N vertices, fi ...
- 牛客网多校第5场 H subseq 【树状数组+离散化】
题目:戳这里 学习博客:戳这里 题意:给n个数为a1~an,找到字典序第k小的序列,输出该序列所有数所在位置. 解题思路:先把所有序列预处理出来,方法是设一个数组为dp,dp[i]表示以i为开头的序列 ...
- 牛客网多校第5场 I vcd 【树状数组+离散化处理】【非原创】
题目:戳这里 学习博客:戳这里 作者:阿狸是狐狸啦 n个点,一个点集S是好的,当且仅当对于他的每个子集T,存在一个右边无限延长的矩形,使的这个矩形包含了T,但是和S-T没有交集. 求有多少个这种集合. ...
- 牛客网多校第4场 J Hash Function 【思维+并查集建边】
题目链接:戳这里 学习博客:戳这里 题意: 有n个空位,给一个数x,如果x%n位数空的,就把x放上去,如果不是空的,就看(x+1)%n是不是空的. 现在给一个已经放过数的状态,求放数字的顺序.(要求字 ...
- 牛客网多校第4场 A.Ternary String 【欧拉降幂】
题目:戳这里 学习博客:戳这里 欧拉函数的性质: ① N是不为0的整数.φ(1)=1(唯一和1互质的数就是1本身) ② 除了N=2,φ(N)都是偶数. ③ 小于N且与N互质的所有数的和是φ(n)*n/ ...
随机推荐
- Java自学笔记之学生管理系统
实现:学生管理系统,实现学生信息的添加.修改.查询和删除功能 涉及:集合的基础知识(集合遍历,值得获取与替换,set/get方法) 代码如下: Student文件 1 package Demo_120 ...
- PAT Advanced 1004 Counting Leaves
题目与翻译 1004 Counting Leaves 数树叶 (30分) A family hierarchy is usually presented by a pedigree tree. You ...
- 查看内核打印信息指令dmesg
linux系统启动的时候打印的的信息非常重要,有时候需要看这些信息但是又不想重启,可以用dmesg这条指令.
- LR_添加系统资源监控失败
1.服务开启情况:RPC.Rmote Resgistry.Network DDE.Server.Workstation.Network connection以上服务是否已开启 2.是否开了防火墙,如有 ...
- 在QML 中用javascritpt 将中文转换拼音,可以在音标
项目需要, 今天整理了一下.在QML调用javascrit将中文汉字转换成拼音. 感觉执行效率低.下面是主要代码. 具体代码请参考QMLPinyin 代码 ```import "./piny ...
- TCP/IP网络中的显式拥塞通告(ECN)
当前的TCP 实现将TCP 端节点之间的中间网络视为一个不透明的"黑盒".TCP 包进入和流出这个盒子.有些时候进入盒子的包被丢失了.因为今天的数字和光媒体上出现比特级错误的机会非 ...
- 省选复习 - LCT 笔记
目录 LCT 笔记 主要功能 和其它数据结构的比较 思想 虚实剖分 如何维护所有的链 实链 虚边 开始构思 具体要维护的功能(从基础到高级) Splay部分 access(u) make(u) fin ...
- Horde Groupware Webmail Edition 远程命令执行
saturn:~ mr_me$ ./poc.py (+) usage ./poc.py <target> <path> <user:pass> <connec ...
- 2019牛客多校第三场D-Big Integer
题意 定义\(A(n)\) 为 n个1表示的十进制数,例如\(A(3) = 111\) 然后对于\(1 \le i \le n,1\le j \le m\) 问有多少的 \(pairs(i,j)\)满 ...
- codeforces#244(div.2) C
动漫节一游回来之后一直处于一种意识模糊的状态 看到大家都陆陆续续地过了C心里还是有点着急(自己没思路啊囧) 其实当时就在想该如何找到DFS中的一个环,然后再找到环路上最小的一个值 把所有环路上最小的值 ...