牛客网多校第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/ ...
随机推荐
- linux搭建ARM可调式环境
0x00 前言 本文中所介绍的方法目前只测试了单个的demo,并没有拿大型的项目做测试,但是应该是大同小异.这里介绍两种方法,一种是有独立的ARM硬件,另一种是依靠qemu实现的模拟化,其实其本质都是 ...
- 六个你不知道的PR快捷键,拯救你的剪辑效率
5G时代到来,会剪辑视频的人,无论在校园还是未来步入职场都很吃香.对于普通人来说,视频处理也成为了一个通用技能.PR是我们大多数人剪辑中,经常会用到的剪辑工具,之前的文章中已经给大家总结了pr的一些提 ...
- 自动化接口差异测试-diffy 回归测试 charles rewrite 请求
https://mp.weixin.qq.com/s/vIxbtQtRRqgYCrDy7XTcrA 自动化接口差异测试-diffy Boris 搜狗测试 2018-08-30 自动化接口差异测试- ...
- 大数据之Hadoop技术入门汇总
今天,小编对Hadoop入门学习知识进行了汇总,帮助大家更好地入手大数据.小编关于Hadoop入门总共发写了12篇原创文章,文章是参照尚硅谷大数据视频教程来进行撰写的. 今天,小编带你解锁正确的阅读顺 ...
- mac或linux常见命令
1. 用某个软件打开某文件,如subline text: https://blog.csdn.net/Cinderella_hou/article/details/82392139 如果想使用subl ...
- Phoenix简介概述,Phoenix的Java API 相关操作优秀案例
Phoenix简介概述,Phoenix的Java API 相关操作优秀案例 一.Phoenix概述简介 二.Phoenix实例一:Java API操作 2.1 phoenix.properties 2 ...
- hadoop(集群)完全分布式环境搭建
一,环境 主节点一台: ubuntu desktop 16.04 zhoujun 172.16.12.1 从节点(slave)两台:ubuntu server 16.04 hadoop2 ...
- markdown 编辑器使用教程---字体、颜色、表格换行、链接等
资源池: 绿色版markdown编辑器:点击这里 提取码:ftf9 1.标题 #一级标题 ##二级标题 ###三级标题 ####四级标题 #####五级标题 ######六级标题 一级标题 二级标题 ...
- PHP-mysql存储照片的两种方式
PHP-mysql存储照片的两种方式 方式一:把图片数据存储在数据库中(二进制) 数据库代码: CREATE TABLE `photo` ( `id` int(10) unsigned NOT ...
- ArrayList源码分析(JDK1.8)
概述 ArrayList底层是基于数组实现的,并且支持动态扩容的动态数组(变长的集合类).ArrayList允许空值和重复的元素,当向ArrayList中添加元素数量大于其底层数组容量时,会通过扩容机 ...