牛客网暑期ACM多校训练营(第五场)F take(概率, 递推)
链接:
https://www.nowcoder.com/discuss/84119
题意:
给定n个箱子, 每个箱子打开发现钻石的概率P(这里的P要除100), 每个钻石的重量, 有一个人只能持有一个钻石, 每次打开箱子发现手中的钻石小于箱子的钻石, 他就会换掉手中的钻石, 求交换次数的数学期望
分析:
对于一个箱子, 取里面钻石的概率就是(P * (之前不打开比它重的概率)), 那么从最重的钻石开始递推, 用树状数组统计(之前不打开)的概率, 然后把这个点设为不打开。
树状数组一开始初始化为1, 这些箱子起始不打开的概率为1.
#include<bits/stdc++.h>
using namespace std;
const int MOD = ;
const int maxN = 1e6 + ;
int n;
long long c[maxN];
struct box{
long long p, d, index;
bool operator < (const box& a) const{
return d != a.d ? d > a.d : index < a.index;
}
}a[maxN];
long long inv(long long a, long long m){
if(a == ) return ;
return inv(m % a, m) * (m - m / a) % m;
}
int lowbit(int x){
return x & -x;
}
long long sum(int x){
long long ret = ;
while(x > ){
ret *= c[x];
ret %= MOD;
x -= lowbit(x);
}
return ret;
}
void update(int x, int val){
while(x <= n){
c[x] *= val;
c[x] %= MOD;
x += lowbit(x);
}
}
int main(){
// freopen("1.txt","r", stdin);
// freopen("123.txt","w", stdout);
long long INV = inv(, MOD);
scanf("%d", &n);
for(int i = ; i <= n; i++){
c[i - ] = ;
scanf("%lld %lld", &a[i].p, &a[i].d);
a[i].index = i;
}
sort(a + , a + n + );
long long ans = ;
long long temp = ;
for(int i = ; i <= n; i++){
long long p = a[i].p, id = a[i].index;
temp = ((( p * sum(id-) ) % MOD ) * INV) % MOD; //前面不取得概率之积 * 该点的概率
// printf("%lld %lld\n",sum(id - 1), temp);
ans = (ans + temp) % MOD;
update(id, ( - p) * INV % MOD); //把该点更新成不取的
}
printf("%lld\n", ans);
return ;
}
牛客网暑期ACM多校训练营(第五场)F take(概率, 递推)的更多相关文章
- 牛客网 暑期ACM多校训练营(第二场)A.run-动态规划 or 递推?
牛客网暑期ACM多校训练营(第二场) 水博客. A.run 题意就是一个人一秒可以走1步或者跑K步,不能连续跑2秒,他从0开始移动,移动到[L,R]的某一点就可以结束.问一共有多少种移动的方式. 个人 ...
- 牛客网 暑期ACM多校训练营(第一场)A.Monotonic Matrix-矩阵转化为格子路径的非降路径计数,Lindström-Gessel-Viennot引理-组合数学
牛客网暑期ACM多校训练营(第一场) A.Monotonic Matrix 这个题就是给你一个n*m的矩阵,往里面填{0,1,2}这三种数,要求是Ai,j⩽Ai+1,j,Ai,j⩽Ai,j+1 ,问你 ...
- 2018牛客网暑期ACM多校训练营(第二场)I- car ( 思维)
2018牛客网暑期ACM多校训练营(第二场)I- car 链接:https://ac.nowcoder.com/acm/contest/140/I来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 ...
- 牛客网暑期ACM多校训练营(第一场) - J Different Integers(线段数组or莫队)
链接:https://www.nowcoder.com/acm/contest/139/J来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...
- 牛客网暑期ACM多校训练营(第九场) A题 FWT
链接:https://www.nowcoder.com/acm/contest/147/A来源:牛客网 Niuniu has recently learned how to use Gaussian ...
- 牛客网暑期ACM多校训练营(第九场)D
链接:https://www.nowcoder.com/acm/contest/147/D来源:牛客网 Niuniu likes traveling. Now he will travel on a ...
- 牛客网暑期ACM多校训练营(第二场)B discount
链接:https://www.nowcoder.com/acm/contest/140/B来源:牛客网 题目描述 White Rabbit wants to buy some drinks from ...
- 2018牛客网暑期ACM多校训练营(第一场)D图同构,J
链接:https://www.nowcoder.com/acm/contest/139/D来源:牛客网 同构图:假设G=(V,E)和G1=(V1,E1)是两个图,如果存在一个双射m:V→V1,使得对所 ...
- 牛客网暑期ACM多校训练营(第二场) I Car 思维
链接:https://www.nowcoder.com/acm/contest/140/I来源:牛客网 White Cloud has a square of n*n from (1,1) to (n ...
- 牛客网暑期ACM多校训练营(第二场) D money 思维
链接:https://www.nowcoder.com/acm/contest/140/D来源:牛客网 White Cloud has built n stores numbered from 1 t ...
随机推荐
- 反射和__setattr__,__delattr__,__getattr__用法
反射 什么是反射:反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先 ...
- [coci2015-2016 coii] Palinilap【字符串 哈希】
传送门:http://www.hsin.hr/coci/archive/2015_2016/ 进去之后点底下的那个.顺带说一句,题目既不是一个英文单词,也不是克罗地亚单词,估计只是从回文串的英文单词p ...
- C#私有的构造函数的作用
C#私有的构造函数的作用:当类的构造函数是私有的时候,也已防止C1 c1=new C1();实例化类.常见的应用是工具类和单例模式. using System;using System.Collect ...
- # bug 查找 (一) 快速记录 IE8 下三个问题
bug 查找 (一) 快速记录 IE8 下三个问题 昨天 pc 端网站上灰度,发现多个在 IE8 下的问题,描述和解决方案如下: 第一个问题是 css 文件过大 现象 把项目所有的 css 打包成单个 ...
- Java基础教程(25)--I/O
一.I/O流 I/O流表示输入源或输出目标.流可以表示许多不同类型的源和目标,例如磁盘文件.设备.其他程序等. 流支持许多不同类型的数据,包括字节.原始数据类型.字符和对象等.有些流只传递数据 ...
- 1058 合唱队形 2004年NOIP全国联赛提高组
1058 合唱队形 2004年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Descripti ...
- DrawerLayout Demo
源码下载:http://download.csdn.net/detail/bx276626237/8882763
- DRP项目
DRP(distribution resource planning)分销资源计划是管理企业的分销网络的系统,目的是使企业具有对订单和供货具有快速反应和持续补充库存的能力.解决了随着企业销售规模的逐渐 ...
- MySQL索引使用等
- Android学习总结(二)——Service基本概念和生命周期
好了,前面我们已经学习了Activity的知识,相信大家也有一定的理解,但是还是不能放松,Android四大组件,我们才学习了一个而已,接下我们继续学习Service.计划总结如下内容: 一.Serv ...