https://www.lydsy.com/JudgeOnline/problem.php?id=5340

https://www.luogu.org/problemnew/show/P4564

https://loj.ac/problem/2552

(这送分题我写不出来……我退役吧)

也懒得写题解了,看https://kelin.blog.luogu.org/solution-p4564吧。

什么你说op=1的你没听懂,那你可能和我一样了(握手(大雾。

那么遵从原题解的命名,f[u][i]表示除u以外有i个人活着的概率,g[i]为i个人活着的概率,p[u]表示u活着的概率。

(其实正确的思路应该先想到g数组如何求,然后发现g数组的信息无法落到每个具体人的头上,所以需要f数组。)

则可以发现,g的范围比f大(包括了u活着的可能性),于是需要扣除u活着时候有i个人活着的概率。

所以答案就是g[i]-p[u]*f[u][i-1]了……等等我怎么样例都过不去emmm

其实!这个式子蕴含了一个信息就是保证了u是死的,而实际上我们要求的是不知道u的死活的概率,于是除以(1-p[u])就是答案了。

(然而这个思路可能考场上很难想吧……大部分人应该都是靠推推出来的这个式子,只有我啥也不会……)

  1. #include<cmath>
  2. #include<queue>
  3. #include<cstdio>
  4. #include<cctype>
  5. #include<vector>
  6. #include<cstring>
  7. #include<iostream>
  8. #include<algorithm>
  9. using namespace std;
  10. typedef long long ll;
  11. const int N=;
  12. const int p=;
  13. inline int read(){
  14. int X=,w=;char ch=;
  15. while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
  16. while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
  17. return w?-X:X;
  18. }
  19. inline void write(int x){
  20. if(x>)write(x/);
  21. putchar(x%+'');
  22. }
  23. int qpow(int k,int n){
  24. int res=;
  25. while(n){
  26. if(n&)res=(ll)res*k%p;
  27. k=(ll)k*k%p;n>>=;
  28. }
  29. return res;
  30. }
  31. int n,q,f[N][],g[N],h[N],s[N],inv[N];
  32. inline int add(ll x,int y){
  33. x+=y;if(x>=p)x-=p;return x;
  34. }
  35. inline int sub(int x,int y){
  36. x-=y;if(x<)x+=p;return x;
  37. }
  38. int main(){
  39. n=read();
  40. for(int i=;i<=n;i++)f[i][read()]=;
  41. inv[]=;
  42. for(int i=;i<N;i++)inv[i]=(ll)(p-p/i)*inv[p%i]%p;
  43. q=read();
  44. while(q--){
  45. int op=read();
  46. if(!op){
  47. int id=read(),u=read(),v=read();
  48. int P=(ll)u*qpow(v,p-)%p;
  49. f[id][]=(f[id][]+(ll)P*f[id][]%p)%p;
  50. for(int i=;i<=;i++)
  51. f[id][i]=add((ll)sub(,P)*f[id][i]%p,(ll)P*f[id][i+]%p);
  52. }else{
  53. int k=read();
  54. for(int i=;i<=k;i++)s[i]=sub(,f[read()][]),h[i]=;
  55. h[]=;
  56. for(int i=;i<=k;i++)
  57. for(int j=i;j>=;j--)
  58. if(!j)h[j]=(ll)sub(,s[i])*h[j]%p;
  59. else h[j]=add((ll)s[i]*h[j-]%p,(ll)(p+-s[i])*h[j]%p);
  60. for(int i=;i<=k;i++){
  61. if(!s[i]){putchar('');putchar(' ');continue;}
  62. if(s[i]==)
  63. for(int j=;j<=k-;j++)g[j]=h[j+];
  64. else{
  65. int Inv=qpow(sub(,s[i]),p-);g[]=(ll)h[]*Inv%p;
  66. for(int j=;j<=k-;j++){
  67. g[j]=(ll)sub(h[j],(ll)g[j-]*s[i]%p)*Inv%p;
  68. }
  69. }
  70. int ans=;
  71. for(int j=;j<=k-;j++)ans=add(ans,(ll)g[j]*inv[j+]%p);
  72. write((ll)ans*s[i]%p);putchar(' ');
  73. }
  74. putchar('\n');
  75. }
  76. }
  77. for(int i=;i<=n;i++){
  78. int ans=;
  79. for(int j=;j<=;j++)
  80. (ans+=(ll)f[i][j]*j%p)%=p;
  81. write(ans);putchar(' ');
  82. }
  83. return ;
  84. }

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

BZOJ5340 & 洛谷4564 & LOJ2552:[CTSC2018]假面——题解的更多相关文章

  1. 洛谷P1783 海滩防御 分析+题解代码

    洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...

  2. 洛谷P4047 [JSOI2010]部落划分题解

    洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...

  3. 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)

    洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...

  4. 洛谷10月月赛II题解

    [咻咻咻] (https://www.luogu.org/contestnew/show/11616) 令人窒息的洛谷月赛,即将参加NOIp的我竟然只会一道题(也可以说一道也不会),最终145的我只能 ...

  5. [洛谷P1823]音乐会的等待 题解(单调栈)

    [洛谷P1823]音乐会的等待 Description N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没 ...

  6. BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解

    +++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...

  7. 洛谷 p1516 青蛙的约会 题解

    dalao们真是太强了,吊打我无名蒟蒻 我连题解都看不懂,在此篇题解中,我尽量用语言描述,不用公式推导(dalao喜欢看公式的话绕道,这篇题解留给像我一样弱的) 进入正题 如果不会扩展欧里几德的话请先 ...

  8. 洛谷p2370yyy2015c01的U盘题解

    没什么特殊的想法 就是看自己很久没有更新关于题解类的文章了而已 (其实这是我好久之前做的, 只是把它从洛谷博客搬到了这里而已) 题目 首先分析题目要二分 他长成这个亚子太二分了 所以就要二分 最好是先 ...

  9. 2019.06.17课件:[洛谷P1310]表达式的值 题解

    P1310 表达式的值 题目描述 给你一个带括号的布尔表达式,其中+表示或操作|,*表示与操作&,先算*再算+.但是待操作的数字(布尔值)不输入. 求能使最终整个式子的值为0的方案数. 题外话 ...

随机推荐

  1. java 创建具有参数化类型的数组

    1. List<String>[] ls; Object[] objects = ls; objects[1] = new ArrayList<Integer>(); 先把数组 ...

  2. Java多线程之volatile与synchronized比较

    可见性: JAVA内存模型: java为了加快程序的运行效率,对一些变量的操作是在寄存器或者CPU缓存上进行的,后面再同步到主存中 看上图,线程在运行的过程中,会从主内存里面去去变量,读到自己的空间内 ...

  3. Qt-QML-全新导航布局

    哈哈,写了一个全新的导航布局,具体内容还没有完成,现在先把整个布局的屏幕划分分享出来 先看效果图 身下也没有好说的,看代码 /* 作者:张建伟 时间:2018年4月3日 简述:该文件为下显主窗口布局文 ...

  4. pyhon文件操作典型代码实现(非常经典!)

    1. 编写一个程序,统计当前目录下每个文件类型的文件数,程序实现如图: 实现代码: import os all_files = os.listdir(os.chdir("D:\\" ...

  5. angular-列表进行添加、编辑等操作时此行变色。

    今天接触了一个功能,就是在一个列表中,当你新增或者对第N列进行编辑,删除等操作时这一列会变颜色.让用户对操作了哪行数据更认识更清晰,刷新之后这行的颜色就会消失.我觉得这个很有意思,记录一下.效果如下. ...

  6. Struts2(九.初始化用户列表时显示用户照片数目)

    1.userlist.jsp //显示每个用户照片的数目(遍历每个用户) $(".picture").each(function(i,e){ $.post("${page ...

  7. 在github上面创建属于自己的个性主页

    圈子里面越来越多的同事在github上面创建自己的项目文档,那里确实高手云集,海内外的技术大牛小牛们都在那儿有一席之地,为“helloword”贡献自己. 以上感慨略过... 这几日正想创建一个自己的 ...

  8. android AVD创建

    参数详解:AVD name:是要填写的虚拟机名称,这个自己随便取名就行了,要纯英文和数字组成Device:这里是要选择模拟的设备,一般选择3.2*QVGA(ADP2)(320*480: mdpi)这个 ...

  9. Java进阶知识点:并发容器背后的设计理念

    一.背景 容器是Java编程中使用频率很高的组件,但Java默认提供的基本容器(ArrayList,HashMap等)均不是线程安全的.当容器和多线程并发编程相遇时,程序员又该何去何从呢? 通常有两种 ...

  10. 【MFC】VS2017新建完MFC后,没有界面,只有代码

    问题描述:双击.rc文件后提示在另一个编辑器中打开 解决方法整合: 1----- 打开工程之前先把.rc文件改个名称,然后打开工程双击解决方案管理器的.rc文件, 会显示"载入失败" ...