【CF913F】Strongly Connected Tournament 概率神题
【CF913F】Strongly Connected Tournament
题意:有n个人进行如下锦标赛:
1.所有人都和所有其他的人进行一场比赛,其中标号为i的人打赢标号为j的人(i<j)的概率为$p=a\over b$。
2.经过过程1后我们相当于得到了一张竞赛图,将图中所有强联通分量缩到一起,可以得到一个链,然后对每个大小>1的强联通分量重复过程1。
3.当没有大小>1的强连通分量时锦标赛结束。
现在给出n,a,b,求期望比赛的场数。
$n\le 2000,a<b\le 1000$
题解:神题。先给出DP方程:
$ans(0)=ans(1)=0$
$ans(i)=\sum\limits_{j=1}^istrong(j)\times cp(i,j) \times (\frac {j(j-1)} 2+j(i-j)+ans(j)+ans(i-j)),i>1$
解释一下,我们此处相当于枚举了链上最后一个强联通分量的大小。其中strong(j)表示一个大小为j的点集是强连通分量的概率,cp(i,j)表示i中选出j个人使得这j个人全部输给了余下i-j个人的概率。注意这个方程的左右两边都有ans(i)这一项,我们到时候应该移项处理。
如何求strong(i)呢?我们考虑容斥,枚举其中出现一个大小<i的强联通分量的概率,即:
$strong(i)=1-\sum\limits_{j=1}^{i-1}strong(j)\times cp(i,j)$
如何求cp(i,j)呢?求法类似于组合数的递推方法。我们考虑i中标号最大的那个人,便能得到:
$cp(i,j)=cp(i-1,j-1)\times (1-p)^{i-j}+cp(i-1,j)\times p^j$
时间复杂度$O(n^2)$。
#include <cstdio>
#include <cstring>
#include <iostream> using namespace std;
typedef long long ll;
const ll P=998244353;
int n;
ll p;
ll c[2010][2010],s[2010],f[2010],p0[2010],p1[2010];
inline ll pm(ll x,ll y)
{
ll z=1;
while(y)
{
if(y&1) z=z*x%P;
x=x*x%P,y>>=1;
}
return z;
}
int main()
{
scanf("%d",&n);
int i,j,a,b;
scanf("%d%d",&a,&b),p=a*pm(b,P-2)%P;
f[0]=f[1]=0,s[1]=1;
for(p0[0]=p1[0]=1,i=1;i<=n;i++) p0[i]=p0[i-1]*p%P,p1[i]=p1[i-1]*(1-p)%P;
for(i=0;i<=n;i++)
{
c[i][0]=1;
for(j=1;j<=i;j++) c[i][j]=(c[i-1][j]*p1[j]+c[i-1][j-1]*p0[i-j])%P;
}
for(i=1;i<=n;i++)
{
s[i]=1;
for(j=1;j<i;j++) s[i]=(s[i]-s[j]*c[i][j])%P;
}
for(i=2;i<=n;i++)
{
ll tmp=0;
for(j=1;j<i;j++) tmp=(tmp+s[j]*c[i][j]%P*(f[j]+f[i-j]+j*(j-1)/2+j*(i-j)))%P;
tmp=(tmp+s[i]*(i*(i-1)/2))%P;
f[i]=tmp*pm(1-s[i],P-2)%P;
}
printf("%lld",(f[n]+P)%P);
return 0;
}
【CF913F】Strongly Connected Tournament 概率神题的更多相关文章
- 【CodeForces】913 F. Strongly Connected Tournament 概率和期望DP
[题目]F. Strongly Connected Tournament [题意]给定n个点(游戏者),每轮游戏进行下列操作: 1.每对游戏者i和j(i<j)进行一场游戏,有p的概率i赢j(反之 ...
- Codeforces913F. Strongly Connected Tournament
n<=2000个人参加比赛,这样比:(这里的序号没按题目的)1.两两比一场,比完连个图,边i->j表示i赢了j.2.连完那个图强联通分量缩起来,强连通分量内继续比,即强连通分量递归进行1. ...
- @codeforces - 913F@ Strongly Connected Tournament
目录 @description@ @solution@ @accepted code@ @details@ @description@ n 个选手参加了一场竞赛,这场竞赛的规则如下: 1.一开始,所有 ...
- Strongly Connected Tournament
题解: 有一个很重要的性质就是 对于一张完全强联通图来说 一定有一个强联通分量入度为0(或者出度为0) 然后就一些计数题的基本套路 https://www.cnblogs.com/onioncyc/p ...
- 【BZOJ2554】Color 概率神题
[BZOJ2554]Color Description 有n个球排成一列,每个球都有一个颜色,用A-Z的大写字母来表示,我们每次随机选出两个球ball1,ball2,使得后者染上前者的颜色,求期望操作 ...
- cf475B Strongly Connected City
B. Strongly Connected City time limit per test 2 seconds memory limit per test 256 megabytes input s ...
- PTA Strongly Connected Components
Write a program to find the strongly connected components in a digraph. Format of functions: void St ...
- POJ 2484 A Funny Game(神题!)
一开始看这道博弈题的时候我就用很常规的思路去分析了,首先先手取1或者2个coin后都会使剩下的coin变成线性排列的长条,然后无论双方如何操作都是把该线条分解为若干个子线条而已,即分解为若干个子游戏而 ...
- BUAA 724 晴天小猪的神题(RMQ线段树)
BUAA 724 晴天小猪的神题 题意:中文题,略 题目链接:http://acm.buaa.edu.cn/problem/724/ 思路:对于询问x,y是否在同一区间,可以转换成有没有存在一个区间它 ...
随机推荐
- Thinkphp部署
环境nginx,apache,iis naginx环境需要: apache需要: iis需要: 项目入口 1.根目录("/") 2.多级目目录(“/public”) 静态文件 静态 ...
- WWDC 2015大会到来了
WWDC 2015大会到来了,观看到凌晨3点,困死了. 从现场直播视频可以看到: (1)iOS 9的新体验:Siri更智能.Search更全面.苹果支付更方便.Notes和News更新颖好用.地图应用 ...
- vue实现文章内容过长点击阅读全文功能
直接上代码: html: <div class="bodyFont clearfloat" id="bodyFont" ref="bodyFon ...
- ubuntu 4.10~5.10 :古老的ubuntu上安装oracle10g的情况
64位的: 不用想了,安装不上,因为ubuntu库里没有提供编译环境:安装不上gcc-multilib库.也没有libc6-dev-i386库! 自己这点水平,真搞不定! 32位的: 很顺利.很顺利! ...
- MTK 系统禁止通知状态栏下拉
之前看了网上很多修改,感觉太繁琐,修改代码太多,最后感觉还是自己找找,看能不能简单点 diff --git a/android/frameworks/base/packages/SystemUI/sr ...
- PHP基本连接数据库
最简单的代码 connect.php <?php $host="localhost"; $db_user="root"; $db_pass="& ...
- Linux下安装配置MySQL
一.删除原来的MySQL 在安装前要先确定系统是否已经安装了其他版本的MySQL,如已安装其他版本的MySQL,需先删除后再安装新版本. 1. 执行yum命令,删除MySQL的lib库,服务文件 yu ...
- 集群瓶颈为什么是磁盘io
阅读本文思考: 1.对磁盘IO了解多少 2.为什么是磁盘IO是瓶颈,有没有自己的答案 想了解磁盘io可以查看此帖:集群瓶颈:磁盘IO必读 (磁盘IO:磁盘输出输出) 集群的瓶颈提出多种看法,其中网络和 ...
- C++ template —— 模板基础(一)
<C++ Template>对Template各个方面进行了较为深度详细的解析,故而本系列博客按书本的各章顺序编排,并只作为简单的读书笔记,详细讲解请购买原版书籍(绝对物超所值).---- ...
- java多线程例子(生成者和消费者)
Info.cs 商品 public class Info { boolean flag=false; private String name="张三"; private int a ...