链接:牛客网暑期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. Java日期类题目

    每类题都有各种各样解决的方式,大家随意发散 分析以下需求,并用代码实现 1.已知日期字符串:"2015-10-20",将该日期字符串转换为日期对象 2.将(1)中的日期对象转换为日 ...

  2. Knowledge Point 20180305 Java程序员详述编码Unicode

    Unicode Unicode(统一码.万国码.单一码)是计算机科学领域里的一项业界标准,包括字符集.编码方案等.Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设 ...

  3. 霍金:AI或许能根除疾病和贫穷,但也可能摧毁人类 | GMIC 2017

    在我的一生中,我见证了社会深刻的变化.其中最深刻的,同时也是对人类影响与日俱增的变化,是人工智能的崛起.简单来说,我认为强大的人工智能的崛起,要么是人类历史上最好的事,要么是最糟的.我不得不说,是好是 ...

  4. NAT和DHCP

    涉及的命令 NAT 动态NAT清除:clear ip nat translation * 进入路由器环回接口:int loo 0 静态NAT清除: (config)#No ip nat inside ...

  5. python 变量定义

    变量定义 什么是变量? 在程序运行过程中,其值可以改变的量. 标识符(命令规范) 只能由数字.字母.下划线组成 不能以数字开头 不能是系统关键字 import keyword ​ # 打印关键字列表 ...

  6. 『C++』Temp_2018_12_13 函数指针

    #include <iostream> #include <string> using namespace std; class Test{ private: string n ...

  7. hdu_4135_Co-prime

    Given a number N, you are asked to count the number of integers between A and B inclusive which are ...

  8. 发送邮箱验证码、session校验

    本篇主要描述“发送邮箱验证码.session校验”相关前(html\js)后(java)台代码,业务逻辑示例,闲话少诉,直接上代码. 1.引入的jar包是mail-1.4.jar 2.java底层发送 ...

  9. Java分布式锁之数据库方式实现

    之前的文章<Java分布式锁实现>中列举了分布式锁的3种实现方式,分别是基于数据库实现,基于缓存实现和基于zookeeper实现.三种实现方式各有可取之处,本篇文章就详细讲解一下Java分 ...

  10. JS this总结

    JS中一切皆对象,this关键字出现在对象定义时的成员(属性和方法)里,因此this指向的是一个JS对象,这个JS对象具体是哪一个的确定是在运行时确定的. 非严格模式: 1.作为对象成员:对象调用对象 ...