题目链接

感觉这题很裸啊,除了看着恶心点也没什么了,怎么过的人那么少。。


\(Description\)

给定\(n,r,s\),表示有\(n\)个人,设每个人的得分是非负整数\(a_i\),已知第一个人的得分\(a_1\geq r\),所有人的得分之和\(\sum a_i=s\)。得分最高的一个人获胜;若有多个人得分最高,则随机一个人获胜。

求在所有可能情况下,第一个人获胜的概率。

\(n\leq100,\ 0\leq r\leq s\leq5000\)。

\(Solution\)

范围不是很大,先考虑枚举第一个人的得分\(x\)。

然后枚举有\(i\)个人的得分和第一个人相同。这里计算的时候不妨算上第一个人。

现在我们已知有\(i\)个人得分为\(x\),要求剩下\(n-i\)个人的分数和\(\sum a_j\leq s-i\times x\),且\(a_j<x\)。

如果没有上界限制,就是经典的组合问题(方程非负整数解数)。

对于上界的限制,考虑容斥,枚举有多少人分数达到\(x\)。即$$\sum_{j=0}{n-i}(-1)jC_{n-i}^jf(n-i,s-(i+j)\times x)$$

其中\(f(n,m)\)是\(\sum_{i=1}^na_i=m\)的非负整数解数,即\(C_{n+m-1}^{m}\)。

总起来答案就是$$\sum_{x=r}s\sum_{i=1}n\frac{C_{n-1}{i-1}}{i}\sum_{j=0}{n-i}(-1)jC_{n-i}jC_{n-i+s-(i+j)x-1}^{n-i-1}$$

最后再除个总方案数\(f(n,s-r)\)。

复杂度\(O(n^2s)\)。


//62ms	101900KB
#include <cstdio>
#include <algorithm>
#define mod 998244353
#define Mod(x) x>=mod&&(x-=mod)
typedef long long LL;
const int N=5107; int inv[105],C[N][N]; inline int FP(int x,int k)
{
int t=1;
for(; k; k>>=1,x=1ll*x*x%mod)
if(k&1) t=1ll*t*x%mod;
return t;
}
inline void Init(int n,int s)
{
C[0][0]=1;
for(int i=1; i<=s; ++i)
{
C[i][0]=C[i][i]=1;
for(int j=1; j<i; ++j) C[i][j]=C[i-1][j-1]+C[i-1][j], Mod(C[i][j]);
}
inv[1]=1;
for(int i=2; i<=n; ++i) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
} int main()
{
int n,s,r; scanf("%d%d%d",&n,&s,&r);
Init(n,n+s);
LL ans=0;
for(int x=r; x<=s; ++x)
for(int i=1; i<=n; ++i)
{
if(i==n)
{
ans+=(x*n==s)*inv[n];
continue;
}
if(i*x+(n-i)*(x-1)<s||i*x>s) continue;//可有的剪枝,算出来一定是0.
LL tmp=0;
for(int j=0; j<=n-i&&(i+j)*x<=s; ++j)
{
#define v 1ll*C[n-i][j]*C[n-i-1+s-(i+j)*x][n-i-1]%mod
tmp+=j&1?mod-v:v;
}
ans+=tmp%mod*C[n-1][i-1]%mod*inv[i]%mod;
}
printf("%I64d\n",ans%mod*FP(C[n+s-r-1][n-1],mod-2)%mod); return 0;
}

Codeforces.1096E.The Top Scorer(组合)的更多相关文章

  1. CodeForces 1096E: The Top Scorer

    一道经典组合数学+容斥题. 题目传送门:CF1096E. 题意简述: \(p\) 个人,每个人有得分 \(a_i\). 总得分 \(\sum a_i = s\). 第一个人得分 \(a_1 \ge r ...

  2. Codeforces 932E Team work 【组合计数+斯特林数】

    Codeforces 932E Team work You have a team of N people. For a particular task, you can pick any non-e ...

  3. codeforces 630 I(规律&&组合)

    I - Parking Lot Time Limit:500MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Subm ...

  4. CodeForces 452C Magic Trick (排列组合)

    #include <iostream> #include <cstdio> #include<cmath> #include<algorithm> us ...

  5. CF1096E The Top Scorer

    题目地址:洛谷CF1096E 本场AC数最少 (最难) 的题目 题目大意:给出三个数p , s,r,表示有p人,每个人都有一个非负得分,所有人的得分和为s,Hasan的得分至少为r,求Hasan是第一 ...

  6. codeforces 705B B. Spider Man(组合游戏)

    题目链接: B. Spider Man time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  7. codeforces 691F F. Couple Cover(组合计数)

    题目链接: F. Couple Cover time limit per test 3 seconds memory limit per test 512 megabytes input standa ...

  8. Codeforces J. Monotonic Renumeration(组合)

    题目描述: You are given an array consisting of nmonotonic renumeration as an array b consisting of \(n\) ...

  9. codeforces 108D Basketball Team(简单组合)

    D. Basketball Team time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

随机推荐

  1. WinHex数据恢复笔记(二)

    续写上次笔记: 1.Winhex数据恢复软件的界面上的所有功能已经介绍了一遍,最主要的还是编程恢复的能力. 今天主要看看记事本的编辑恢复及其相关的一些问题,记事本的 编辑值是ASCII值,所以没有文件 ...

  2. cf909C 线性dp+滚动数组好题!

    一开始一直以为是区间dp.. /* f下面必须有一个s 其余的s可以和任意f进行匹配 所以用线性dp来做 先预处理一下: fffssfsfs==>3 0 1 1 dp[i][j] 表示第i行缩进 ...

  3. MySQL5.7版本及以上,改密码sql语句;grant创建用户已经密码

    mysql> update mysql.user set authentication_string = password('*****')  where user = 'root'; gran ...

  4. Jmeter中使用外部的java文件

    感觉在Jmeter中使用外部的Java文件比较方便,语法一样,而且可以直接引用,所以个人觉得这个功能还是蛮重要的,特别是在使用Jmeter的过程中,可能需要结合一定的业务场景进行判断等,那使用Jmet ...

  5. Visual Studio 2017 IDE之xml过大报错

    XML处理时遇到这个错误 在powershell中输入 $vsWherePath = Join-Path ${env:ProgramFiles(x86)} "Microsoft Visual ...

  6. js 2017

    JS面向对象 <script> function num(val) { return val * 8 } function Index(name, age) { this.name = n ...

  7. WebApi 得到提交过来的 post 数据

    byte[] byts = new byte[System.Web.HttpContext.Current.Request.InputStream.Length]; System.Web.HttpCo ...

  8. mariadb-半同步复制

    半同步复制: 使用插件 对于从节点,有一部分为同步复制,当主节点复制完从节点后才向客户返回ok,同步超时后自动降级为异步 有一部分为异步复制 这样为了与主节点冗余 基于主从的模式上搭建 半同步复制: ...

  9. 求小于n且与n互质的数的个数

    int eu(int n){ int ans=n; for(int i=2;i*i<=n;i++) { if(n%i==0) { ans=ans/i*(i-1); while(n%i==0)n/ ...

  10. day70 cookie & session 前后端交互分页显示

    本文转载自qimi博客,cnblog.liwenzhou.com 概要: 我们的cookie是保存在浏览器中的键值对 为什么要有cookie? 我们在访问浏览器的时候,千万个人访问同一个页面,我们只要 ...