链接:牛客网暑期ACM多校训练营(第五场):F - take

题意:

Kanade有n个盒子,第i个盒子有p [i]概率有一个d [i]大小的钻石。

起初,Kanade有一颗0号钻石。她将从第1到第n打开盒子。当她打开一个盒子时,如果里面有一颗钻石并且比它的钻石大,那么她将用她的钻石代替它。

现在您需要计算预期的替换次数。

您只需要输出答案模块998244353。

注意:如果x%998244353 = y * d%998244353,那么我们表示x / y%998244353 = d%998244353。

题解:每一个东西对答案的贡献,即这个东西取的概率乘以前面比它大的东西不取的概率。用树状数组维护不取的概率,则每次都能在O(log)的时间取出前面比它大的东西不取的概率。

#include <bits/stdc++.h>
using namespace std; const int mod = ;
const int maxn = 1e5 + ;
int n;
long long p[maxn], d[maxn];
long long lisan[maxn];
long long bit[maxn]; long long pow_mod(long long x, long long n)
{
long long ans = ;
while(n){
if(n & ) ans = ans * x % mod;
x = x * x % mod;
n >>= ;
}
return ans;
} long long sum(int i)
{
long long ans = ;
while(i){
ans = ans * bit[i] % mod;
i -= i & -i;
}
return ans;
} void add(int i, long long x)
{
while(i <= n){
bit[i] = bit[i] * x % mod;
i += i & -i;
}
} int main()
{
long long NY = pow_mod(, mod - ); //求100的逆元 scanf("%d", &n);
for(int i = ; i <= n; i++){
scanf("%lld%lld", &p[i], &d[i]);
lisan[i] = d[i]; //离散化
p[i] = p[i] * NY % mod; //除以100恢复概率
bit[i] = ; //树状数组维护乘积需初始化为1
} sort(lisan + , lisan + + n);
int li = unique(lisan + , lisan + + n) - lisan - 1;
for(int i = ; i <= n; i++){
//最后要求比当前数大的概率,即后缀,会有除法,需求逆元,将大小互换,则可优化
d[i] = li - (lower_bound(lisan + , lisan + + li, d[i]) - lisan) + ;
} long long ans = ;
for(int i = ; i <= n; i++){
ans = (ans + sum(d[i] - ) * p[i]) % mod;
add(d[i], ( - p[i] + mod) % mod);
} printf("%lld\n", ans); return ;
}

牛客网暑期ACM多校训练营(第五场):F - take的更多相关文章

  1. 牛客网 暑期ACM多校训练营(第二场)A.run-动态规划 or 递推?

    牛客网暑期ACM多校训练营(第二场) 水博客. A.run 题意就是一个人一秒可以走1步或者跑K步,不能连续跑2秒,他从0开始移动,移动到[L,R]的某一点就可以结束.问一共有多少种移动的方式. 个人 ...

  2. 牛客网 暑期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 ,问你 ...

  3. 2018牛客网暑期ACM多校训练营(第二场)I- car ( 思维)

    2018牛客网暑期ACM多校训练营(第二场)I- car 链接:https://ac.nowcoder.com/acm/contest/140/I来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 ...

  4. 牛客网暑期ACM多校训练营(第一场) - J Different Integers(线段数组or莫队)

    链接:https://www.nowcoder.com/acm/contest/139/J来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...

  5. 牛客网暑期ACM多校训练营(第九场) A题 FWT

    链接:https://www.nowcoder.com/acm/contest/147/A来源:牛客网 Niuniu has recently learned how to use Gaussian ...

  6. 牛客网暑期ACM多校训练营(第九场)D

    链接:https://www.nowcoder.com/acm/contest/147/D来源:牛客网 Niuniu likes traveling. Now he will travel on a ...

  7. 牛客网暑期ACM多校训练营(第二场)B discount

    链接:https://www.nowcoder.com/acm/contest/140/B来源:牛客网 题目描述 White Rabbit wants to buy some drinks from ...

  8. 2018牛客网暑期ACM多校训练营(第一场)D图同构,J

    链接:https://www.nowcoder.com/acm/contest/139/D来源:牛客网 同构图:假设G=(V,E)和G1=(V1,E1)是两个图,如果存在一个双射m:V→V1,使得对所 ...

  9. 牛客网暑期ACM多校训练营(第二场) I Car 思维

    链接:https://www.nowcoder.com/acm/contest/140/I来源:牛客网 White Cloud has a square of n*n from (1,1) to (n ...

  10. 牛客网暑期ACM多校训练营(第二场) D money 思维

    链接:https://www.nowcoder.com/acm/contest/140/D来源:牛客网 White Cloud has built n stores numbered from 1 t ...

随机推荐

  1. TCP Three-way Handshake

    TCP Connection Management Out-of-Order and Duplication(复制) Problem Old segment from previous connect ...

  2. C#强大的编程功能

    下面列出一些C#重要的功能 1.布尔条件 2.自动垃圾回收 3.标准库 4.组件版本 5.属性和事件 6.委托和事件管理 7.易于使用的泛型 8.索引器 9.条件编译 10.简单的多线程 11.LIN ...

  3. mobBUS

    1.今天听陈刚说起modBUS通信协议,这个还是第一次听说,究竟是什么东东,还是上网查查看吧 2.网上有C语言程序. http://blog.163.com/li_g888@126/blog/stat ...

  4. react使用echarts地图实现中国地图大区展示

    日常项目中经常会用到百度地图或者echarts图标展示,今天给大家展示的是如何在react开发项目中使用百度echars的地图展示,把中国地图分为东北大区.华东大区.华南大区.华西大区.华中大区以及华 ...

  5. java项目如何使用ajax来减少页面的刷新

    之前写项目,总是用重定向或请求转发,导致每做一步动作就会刷新页面,客户体验不好,而且效率低下,这种问题可以使用ajax来有效的解决此类问题的发生. 我使用的框架:Spring boot 数据库:mys ...

  6. SQL优化例子

    如下SQL的优化: select count(*) from ( select id,name,col1,col2 from t1  where name='xxxx' union select id ...

  7. 【saltstack 集中化管理】

    Master(监控端): Minion(被监控端) 监控: /etc/master: #interface:监控端地址 #自动接受被监控端证书 #saltstack文件根目录位置 #启动监控 被监控: ...

  8. HTML5开篇定义(更新中)

    以下介绍的两种属性是为后面的属性支持左铺垫,大概一看就OK了. 通用属性 id 用于为HTML元素指定唯一标识 style 用于为HTML元素指定CSS指定样式 class 用于匹配CSS样式的cla ...

  9. PHP文档生成器(PHPDoc)的基本用法

    目录 PHP文档生成器(PHPDoc)的基本用法 PHPDoc概述 安装 PHPDoc注释规范 页面级别的注释 代码级别的注释 生成API文档 额外软件 PHP文档生成器(PHPDoc)的基本用法 P ...

  10. python之变量的命名规则

    变量的命名规则: 1.变量名由数字.字母和下划线组成名 2.变量名不能以数字开头 3.禁止使用python中的关键字 4.不能使用中文和拼音 5.变量名要区分大小写 6.变量名要有意义 7.推荐写法: ...