题目链接

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


\(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. IDEA加载项目的设置是tomcat

  2. 四.idea本地调试hadoop程序

    目录: 目录见文章1 1.先上案例代码 WordCount.java: import java.io.IOException; import java.util.StringTokenizer; im ...

  3. C# 正则表达式匹配盘符

    if (!Regex.IsMatch(diskName, @"^[c-zC-Z](:\\)?$")) { throw new FormatException($"{dis ...

  4. UICollectionView的常用方法

    class UICollectionView : UIScrollView //初始化,位置,风格 init(frame: CGRect, collectionViewLayout layout: U ...

  5. Spring boot国际化

    国际化主要是引入了MessageSource,我们简单看下如何使用,以及其原理. 1.1 设置资源文件 在 properties新建i18n目录 新建message文件: messages.prope ...

  6. CentOS7.5安装nodejs 转

    CentOS7.5安装nodejs CentOS安装NodeJS 在CentOS下安装NodeJS有以下几种方法.使用的CentOS版本为7.2.CentOS其他版本的NodeJS安装大同小异,也可以 ...

  7. Coolpy开源项目简介

    1.Coolpy初识 基于ARDUINO的迷你操作系统.只需一个ARDUINO主板+Ethernet Shield即可运行.成本低,Coolpy主件以目前淘宝价只需要76元人民币. 2.Coolpy能 ...

  8. Bash远程代码执行漏洞(CVE-2014-6271)案例分析

    Web服务器和CGI的关系 什么是WEB服务器(IIS.Nginx.Apache) WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务.(1)应用层使用HT ...

  9. Android ADB命令 adb devices 出现error:protocol fault (no status)

    问题背景:安装apk是报error:protocol fault<no status>或error:device not found手机驱动有问题 出现的问题如下:adb devices ...

  10. jquery正则表达式验证(手机号、身份证号、中文名称)

    这篇文章主要介绍了jquery正则表达式验证,实现手机号.身份证号.中文名称验证,感兴趣的小伙伴们可以参考一下 本文实例需要验证的内容:中文姓名.手机号.身份证和地址,验证方法分享给大家供大家参考,具 ...