题目链接:https://www.nowcoder.com/acm/contest/143/F

时间限制:C/C++ 1秒,其他语言2秒
空间限制: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

输入描述:

  1. The first line has one integer n.
  2.  
  3. Then there are n lines. each line has two integers p[i]*100 and d[i].

输出描述:

  1. Output the answer module 998244353

输入

  1. 3
  2. 50 1
  3. 50 2
  4. 50 3

输出

  1. 499122178

备注:

  1. 1<= n <= 100000
  2.  
  3. 1<=p[i]*100 <=100
  4.  
  5. 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代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int maxn=+;
  5. const ll MOD=;
  6.  
  7. int n;
  8. struct Box{
  9. ll p,d;
  10. int id;
  11. }box[maxn];
  12. bool cmp(Box a,Box b)
  13. {
  14. if(a.d==b.d) return a.id<b.id;
  15. return a.d>b.d;
  16. }
  17.  
  18. struct _BIT //单点增加,区间查询
  19. {
  20. int n;
  21. ll C[maxn];
  22. int lowbit(int x){return x&(-x);}
  23. void init(int n)
  24. {
  25. this->n=n;
  26. for(int i=;i<=n;i++) C[i]=;
  27. }
  28. void add(int pos,ll val) //在pos点乘上val
  29. {
  30. while(pos<=n)
  31. {
  32. C[pos]=C[pos]*val%MOD;
  33. pos+=lowbit(pos);
  34. }
  35. }
  36. ll ask(int pos) //查询1~pos点的积
  37. {
  38. ll ret=;
  39. while(pos>)
  40. {
  41. ret=ret*C[pos]%MOD;
  42. pos-=lowbit(pos);
  43. }
  44. return ret;
  45. }
  46. }BIT;
  47.  
  48. ll pow(ll a,ll b) //快速幂
  49. {
  50. ll r=,base=a%MOD;
  51. while(b){
  52. if(b&) r*=base , r%=MOD;
  53. base*=base;
  54. base%=MOD;
  55. b>>=;
  56. }
  57. return r;
  58. }
  59. ll inv(ll a){return pow(a,MOD-);} //求逆元
  60.  
  61. int main()
  62. {
  63. cin>>n;
  64. BIT.init(n);
  65. for(int i=;i<=n;i++)
  66. {
  67. cin>>box[i].p>>box[i].d;
  68. box[i].id=i;
  69. }
  70. sort(box+,box+n+,cmp);
  71.  
  72. ll inv100=inv();
  73. ll ans=;
  74. for(int i=;i<=n;i++)
  75. {
  76. ans+=(box[i].p*inv100)%MOD * BIT.ask(box[i].id-)%MOD;
  77. ans%=MOD;
  78. BIT.add(box[i].id,(-box[i].p)*inv100%MOD);
  79. }
  80. cout<<ans<<endl;
  81. }

2018牛客网暑期ACM多校训练营(第五场) F - take - [数学期望][树状数组]的更多相关文章

  1. 2018牛客网暑期ACM多校训练营(第二场)J Farm(树状数组)

    题意 n*m的农场有若干种不同种类作物,如果作物接受了不同种类的肥料就会枯萎.现在进行t次施肥,每次对一个矩形区域施某种类的肥料.问最后枯萎的作物是多少. 分析 作者:xseventh链接:https ...

  2. 牛客网暑期ACM多校训练营(第二场)J farm (二维树状数组)

    题目链接: https://www.nowcoder.com/acm/contest/140/J 思路: 都写在代码注释里了,非常好懂.. for_each函数可以去看一下,遍历起vector数组比较 ...

  3. 2018牛客网暑期ACM多校训练营(第二场):discount(基环树DP)

    题意:有N个不同的商品,每个商品原价是Pi元,如果选择打折,可以减少Di元.  现在加一种规则,每个商品有一个友好商品Fai,如果i用原价买,则可以免费买Fai. 现在问买到所有物品的最小价格. 思路 ...

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

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

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

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

  6. 2018 牛客网暑期ACM多校训练营(第一场) E Removal (DP)

    Removal 链接:https://ac.nowcoder.com/acm/contest/139/E来源:牛客网 题目描述 Bobo has a sequence of integers s1, ...

  7. 2018牛客网暑期ACM多校训练营(第一场)B Symmetric Matrix(思维+数列递推)

    题意 给出一个矩阵,矩阵每行的和必须为2,且是一个主对称矩阵.问你大小为n的这样的合法矩阵有多少个. 分析 作者:美食不可负064链接:https://www.nowcoder.com/discuss ...

  8. 2018牛客网暑期ACM多校训练营(第二场) J - farm - [随机数哈希+二维树状数组]

    题目链接:https://www.nowcoder.com/acm/contest/140/J 时间限制:C/C++ 4秒,其他语言8秒 空间限制:C/C++ 262144K,其他语言524288K ...

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

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

  10. 2018牛客网暑期ACM多校训练营(第二场) A - run - [DP]

    题目链接:https://www.nowcoder.com/acm/contest/140/A 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K ...

随机推荐

  1. [Scikit-learn] 1.4 Support Vector Machines - Linear Classification

    Outline: 作为一种典型的应用升维的方法,内容比较多,自带体系,以李航的书为主,分篇学习. 函数间隔和几何间隔 最大间隔 凸最优化问题 凸二次规划问题 线性支持向量机和软间隔最大化 添加的约束很 ...

  2. vue中使用特殊字体

    有时候为了个性化,可能需要为部分字体添加特殊的font-family 在static文件夹中创建font文件夹,内容如下: css内容如下: @font-face { font-family: vue ...

  3. 转载用sql语句计算出mysql数据库的qps,tps,iops性能指标

    本帖最后由 LUK 于 2014-9-21 22:39 编辑 思路: 1 关注MYSQL三个方面的性能指标,分别为query数,transaction数,io请求数 2 在某个时间范围内(例如20秒) ...

  4. 【代码审计】BootCMS v1.1.3 文件上传漏洞分析

      0x00 环境准备 BootCMS官网:http://www.kilofox.net 网站源码版本:BootCMS v1.1.3  发布日期:2016年10月17日 程序源码下载:http://w ...

  5. U3D 使用VS编程组件

    http://visualstudiogallery.msdn.microsoft.com/6e536faa-ce73-494a-a746-6a14753015f1 http://visualstud ...

  6. 天猫浏览型应用的CDN静态化架构演变(转)

    转自:http://wbj0110.iteye.com/blog/2036613 在天猫双11活动中,商品详情.店铺等浏览型系统,通常会承受超出日常数倍甚至数十倍的流量冲击.随着历年来双11流量的大幅 ...

  7. GCC编译命令常用选项

    GCC是GUN Compiler Collection的简称,除编译程序外,还包含其他相关工具.GCC可将高级语言编写的源代码构建成计算机直接执行的二进制代码.GCC是Linux平台下最常用的编译程序 ...

  8. android linphone中opengl显示的实现

    1,java层 在界面中创建GL2JNIView(基类为GLSurfaceView). 创建对象AndroidVideoWindowImpl,将GL2JNIView作为参数传入构造函数.在该对象中监听 ...

  9. HashRouter与BrowserRouter的异同

    项目中控制路由跳转使用的是BrowserRouter 在开发过程中使用是没有问题的,但是将页面上传至服务器之后,问题就来了:用户访问的资源不存在,页面是空白的. 原因: 在browserHistory ...

  10. css零零散散的笔记

    1.div根据内容自适应大小 效果图: html: <body> <div class="parent"> <div class="chil ...