2018牛客网暑期ACM多校训练营(第五场) F - take - [数学期望][树状数组]
题目链接:https://www.nowcoder.com/acm/contest/143/F
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
Kanade has n boxes , the i-th box has p[i] probability to have an diamond of d[i] size.
At the beginning , Kanade has a diamond of 0 size. She will open the boxes from 1-st to n-th. When she open a box,if there is a diamond in it and it's bigger than the diamond of her , she will replace it with her diamond.
Now you need to calculate the expect number of replacements.
You only need to output the answer module 998244353.
Notice: If x%998244353=y*d %998244353 ,then we denote that x/y%998244353 =d%998244353
输入描述:
- The first line has one integer n.
- Then there are n lines. each line has two integers p[i]*100 and d[i].
输出描述:
- Output the answer module 998244353
输入
- 3
- 50 1
- 50 2
- 50 3
输出
- 499122178
备注:
- 1<= n <= 100000
- 1<=p[i]*100 <=100
- 1<=d[i]<=10^9
题意:
有n个盒子,每个盒子里有p[i]的概率有一颗d[i]大小的钻石,Kanade现在手上有一颗0大小的钻石,他遇到比手上大的钻石就会进行交换,
现在Kanade从1~n打开盒子,计算交换次数的期望。
Notice:
If x%998244353=y*d %998244353 ,then we denote that x/y%998244353 =d%998244353
这句话提示我们如何用整数表示小数,我们定 (p/100)%998244353 = d%998244353,这个d满足 (100*d)%998244353 = p%998244353,
这个整数d,就相当于p/100。
题解:
对于第 i 个盒子,选取这颗钻石进行交换的概率是:前面 1 ~ i-1 颗钻石中比这颗大的那些,都没有出现的概率,乘上当前这颗钻石出现的概率,
即 $p\left[ i \right]\prod\limits_{j < i,d\left[ i \right] < d\left[ j \right]} {\left( {1 - p\left[ j \right]} \right)}$,
而交换次数的期望,就等于求和:“每个盒子交换的概率乘以交换1次(数值上就等于概率)”。
但是不可能 $O\left( {n^2 } \right)$ 过,所以考虑前缀优化,我们可以用树状数组维护原序列的前缀积,
再把盒子按 $d\left[ i \right]$ 降序排序,然后进行枚举,
此时,对于第 i 个盒子,比体积它大的都已经计算过了,都存在树状数组里了,就可以直接查询。
(参考:https://www.nowcoder.com/discuss/89992?type=101&order=0&pos=1&page=0)
AC代码:
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- const int maxn=+;
- const ll MOD=;
- int n;
- struct Box{
- ll p,d;
- int id;
- }box[maxn];
- bool cmp(Box a,Box b)
- {
- if(a.d==b.d) return a.id<b.id;
- return a.d>b.d;
- }
- struct _BIT //单点增加,区间查询
- {
- int n;
- ll C[maxn];
- int lowbit(int x){return x&(-x);}
- void init(int n)
- {
- this->n=n;
- for(int i=;i<=n;i++) C[i]=;
- }
- void add(int pos,ll val) //在pos点乘上val
- {
- while(pos<=n)
- {
- C[pos]=C[pos]*val%MOD;
- pos+=lowbit(pos);
- }
- }
- ll ask(int pos) //查询1~pos点的积
- {
- ll ret=;
- while(pos>)
- {
- ret=ret*C[pos]%MOD;
- pos-=lowbit(pos);
- }
- return ret;
- }
- }BIT;
- ll pow(ll a,ll b) //快速幂
- {
- ll r=,base=a%MOD;
- while(b){
- if(b&) r*=base , r%=MOD;
- base*=base;
- base%=MOD;
- b>>=;
- }
- return r;
- }
- ll inv(ll a){return pow(a,MOD-);} //求逆元
- int main()
- {
- cin>>n;
- BIT.init(n);
- for(int i=;i<=n;i++)
- {
- cin>>box[i].p>>box[i].d;
- box[i].id=i;
- }
- sort(box+,box+n+,cmp);
- ll inv100=inv();
- ll ans=;
- for(int i=;i<=n;i++)
- {
- ans+=(box[i].p*inv100)%MOD * BIT.ask(box[i].id-)%MOD;
- ans%=MOD;
- BIT.add(box[i].id,(-box[i].p)*inv100%MOD);
- }
- cout<<ans<<endl;
- }
2018牛客网暑期ACM多校训练营(第五场) F - take - [数学期望][树状数组]的更多相关文章
- 2018牛客网暑期ACM多校训练营(第二场)J Farm(树状数组)
题意 n*m的农场有若干种不同种类作物,如果作物接受了不同种类的肥料就会枯萎.现在进行t次施肥,每次对一个矩形区域施某种类的肥料.问最后枯萎的作物是多少. 分析 作者:xseventh链接:https ...
- 牛客网暑期ACM多校训练营(第二场)J farm (二维树状数组)
题目链接: https://www.nowcoder.com/acm/contest/140/J 思路: 都写在代码注释里了,非常好懂.. for_each函数可以去看一下,遍历起vector数组比较 ...
- 2018牛客网暑期ACM多校训练营(第二场):discount(基环树DP)
题意:有N个不同的商品,每个商品原价是Pi元,如果选择打折,可以减少Di元. 现在加一种规则,每个商品有一个友好商品Fai,如果i用原价买,则可以免费买Fai. 现在问买到所有物品的最小价格. 思路 ...
- 2018牛客网暑期ACM多校训练营(第二场)I- car ( 思维)
2018牛客网暑期ACM多校训练营(第二场)I- car 链接:https://ac.nowcoder.com/acm/contest/140/I来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 ...
- 2018牛客网暑期ACM多校训练营(第一场)D图同构,J
链接:https://www.nowcoder.com/acm/contest/139/D来源:牛客网 同构图:假设G=(V,E)和G1=(V1,E1)是两个图,如果存在一个双射m:V→V1,使得对所 ...
- 2018 牛客网暑期ACM多校训练营(第一场) E Removal (DP)
Removal 链接:https://ac.nowcoder.com/acm/contest/139/E来源:牛客网 题目描述 Bobo has a sequence of integers s1, ...
- 2018牛客网暑期ACM多校训练营(第一场)B Symmetric Matrix(思维+数列递推)
题意 给出一个矩阵,矩阵每行的和必须为2,且是一个主对称矩阵.问你大小为n的这样的合法矩阵有多少个. 分析 作者:美食不可负064链接:https://www.nowcoder.com/discuss ...
- 2018牛客网暑期ACM多校训练营(第二场) J - farm - [随机数哈希+二维树状数组]
题目链接:https://www.nowcoder.com/acm/contest/140/J 时间限制:C/C++ 4秒,其他语言8秒 空间限制:C/C++ 262144K,其他语言524288K ...
- 牛客网暑期ACM多校训练营(第一场) - J Different Integers(线段数组or莫队)
链接:https://www.nowcoder.com/acm/contest/139/J来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...
- 2018牛客网暑期ACM多校训练营(第二场) A - run - [DP]
题目链接:https://www.nowcoder.com/acm/contest/140/A 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K ...
随机推荐
- [Scikit-learn] 1.4 Support Vector Machines - Linear Classification
Outline: 作为一种典型的应用升维的方法,内容比较多,自带体系,以李航的书为主,分篇学习. 函数间隔和几何间隔 最大间隔 凸最优化问题 凸二次规划问题 线性支持向量机和软间隔最大化 添加的约束很 ...
- vue中使用特殊字体
有时候为了个性化,可能需要为部分字体添加特殊的font-family 在static文件夹中创建font文件夹,内容如下: css内容如下: @font-face { font-family: vue ...
- 转载用sql语句计算出mysql数据库的qps,tps,iops性能指标
本帖最后由 LUK 于 2014-9-21 22:39 编辑 思路: 1 关注MYSQL三个方面的性能指标,分别为query数,transaction数,io请求数 2 在某个时间范围内(例如20秒) ...
- 【代码审计】BootCMS v1.1.3 文件上传漏洞分析
0x00 环境准备 BootCMS官网:http://www.kilofox.net 网站源码版本:BootCMS v1.1.3 发布日期:2016年10月17日 程序源码下载:http://w ...
- U3D 使用VS编程组件
http://visualstudiogallery.msdn.microsoft.com/6e536faa-ce73-494a-a746-6a14753015f1 http://visualstud ...
- 天猫浏览型应用的CDN静态化架构演变(转)
转自:http://wbj0110.iteye.com/blog/2036613 在天猫双11活动中,商品详情.店铺等浏览型系统,通常会承受超出日常数倍甚至数十倍的流量冲击.随着历年来双11流量的大幅 ...
- GCC编译命令常用选项
GCC是GUN Compiler Collection的简称,除编译程序外,还包含其他相关工具.GCC可将高级语言编写的源代码构建成计算机直接执行的二进制代码.GCC是Linux平台下最常用的编译程序 ...
- android linphone中opengl显示的实现
1,java层 在界面中创建GL2JNIView(基类为GLSurfaceView). 创建对象AndroidVideoWindowImpl,将GL2JNIView作为参数传入构造函数.在该对象中监听 ...
- HashRouter与BrowserRouter的异同
项目中控制路由跳转使用的是BrowserRouter 在开发过程中使用是没有问题的,但是将页面上传至服务器之后,问题就来了:用户访问的资源不存在,页面是空白的. 原因: 在browserHistory ...
- css零零散散的笔记
1.div根据内容自适应大小 效果图: html: <body> <div class="parent"> <div class="chil ...