题目链接

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


\(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. css+js杂记

    css的盒子模型分:ie盒子模型和标准盒子模型 区别: 2.选择器 .id选择器(# myid) .类选择器(.myclassname) .标签选择器(div, h1, p) .相邻选择器(h1 + ...

  2. tomcat启动报错:Annotation-specified bean name 'patrolTrailServiceImpl' for bean class [cn.oppo.inventoryService.patrolTrailServiceImpl] con

    注释-为bean类[目录服务patrolTrailServiceImpl]指定的bean名称“patrolTrailServiceImpl”与同名和[目录服务patrolTrailServiceImp ...

  3. POJ 3080 Blue Jeans (字符串处理暴力枚举)

    Blue Jeans  Time Limit: 1000MS        Memory Limit: 65536K Total Submissions: 21078        Accepted: ...

  4. 装饰器实现session登陆 验证功能

    装饰器 登陆验证功能 1.装饰器模板 from django.shortcuts import render, redirect, HttpResponse from django.conf impo ...

  5. UEditor上传自定义文件夹

    需求:使用UEditor上传时需要知道具体到哪个章节得图片,所以得根据Session中得文件重新定义 修改Handler类: public HttpSessionState Session {get; ...

  6. 用Photoshop扭曲滤镜工具打造旋转的光束效果

    原文:https://www.w3cschool.cn/photoshopgjjc/dthfn1.html 教程与已往的不同,作者加上了一些新的步骤如锐化等,出来的效果也有所改进.大致过程:先用滤镜制 ...

  7. RPC服务超时排查思路

    RPC服务超时排查思路- 1.查看服务提供者日志相关信息进行排查- 2.查看消费者的超时时间设置是否合理- 3.查看服务提供者业务逻辑是否有DB操作,有的话看是否有慢SQL- 4.查看服务提供者业务逻 ...

  8. sharepoint2013 Restore-SPSite 报错,采用数据库还原

    PS C:\Users\spadmin> Restore-SPSite http://hz0xw002049:8099 -Path D:\20170731MossSiteSP.bak -Forc ...

  9. Python学习(十三) —— 网络编程

    一.操作系统基础 操作系统(Operating System):OS是管理和控制计算机硬件和软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行 ...

  10. exporter API(导出、输出器api)moodel3.3

    Moodle[导出器]是接收数据并将其序列化为一个简单的预定义结构的类.它们确保输出的数据格式统一,易于维护.它们也用于生成外部函数的签名(参数和返回值) 外部函数定义在moodle/lib/exte ...