题目链接

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


\(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. uva11916 bsgs算法逆元模板,求逆元,组合计数

    其实思维难度不是很大,但是各种处理很麻烦,公式推导到最后就是一个bsgs算法解方程 /* 要给M行N列的网格染色,其中有B个不用染色,其他每个格子涂一种颜色,同一列上下两个格子不能染相同的颜色 涂色方 ...

  2. bzoj 1415

    莫名互测题... 这题一看就是期望dp,可是不会转移,所以考试写50分暴力走人... #include <cstdio> #include <cmath> #include & ...

  3. java 基础知识点必备

    1.为什么集合类没有实现Cloneable和Serializable接口? 克隆(cloning)或者是序列化(serialization)的语义和含义是跟具体的实现相关的.因此,应该由集合类的具体实 ...

  4. 如果拷贝项目出现各种找不到文件的时候,基本就是没有标记,或者文件名的问题,Could not find resource mybatis.xml,解决方法

    Could not find resource mybatis.xml

  5. linux服务器上简单命令

    linux命令 1.ifconfig 查看 设置ip: 2.连接另一台linux 命令 ssh; 3.查看尾部 新追加内容 tail -f; 4.ln -s 原命令 新命令路径: 5.创建一个空文件 ...

  6. javac选项以递归方式编译给定目录下的所有Java文件 - IT屋-程序员软件开发技术分享社区

    http://www.it1352.com/539276.html #Linux $ find -name“* .java”> sources.txt $ javac @ sources.txt ...

  7. TagCanvas 插件

    TagCanvas是一个基于HTML5 Canvas技术开发的标签云动画.还提供一个以jQuery插件形式实现的版本. 它支持文本和图片两种格式,能够以Sphere, hcylinder 或 vcyl ...

  8. php抽奖概率算法

    方法一: function get_rand($proArr) { $result = array(); foreach ($proArr as $key => $val) { $arr[$ke ...

  9. canvas给图片加水印

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. A - Points and Segments CodeForces - 429E

    题解: 方法非常巧妙的一道题 首先考虑要求全部为0怎么做 发现是个欧拉回路的问题(很巧妙) 直接dfs一遍就可以了 而这道题 要求是-1,1,0 我们可以先离散化 完了之后判断每个点被奇数还是偶数条边 ...