• CF1096E The Top Scorer


    概率就是可行方案除以总方案

    先枚举第一个人获胜时的分数(x),和与这个人分数相等的人(i)(这个人也算分数相等)

    接下来的问题就是有(p-i)个人,总分为(s-xi),而且分数都(<x),求方案数

    也就是(s-xi)个球放进(p-i)个容量为(x-1)的篮子

    先解决这个问题:(n)个球放进(m)个容量为(lim)的篮子的方案数

    可以直接容斥,枚举超过容量的篮子数,超过了的篮子直接减掉,隔板法算答案

    所以这个问题的方案数为(sum_{i=0}^{m}(-1)^iC_{m}^{i}C_{n-icdot lim+m-1}^{m-1})

    所以原问题也做完了

    整理一下,(solve(n,m,lim)=sum_{i=0}^{m}(-1)^iC_{m}^{i}C_{n-icdot lim+m-1}^{m-1})

    (ans=sum_{x=r}^{s}sum_{i=1}^p solve(s-xi,p-i,x-1) C_{p-1}^{i-1} cdot i^{-1})

    #include<bits/stdc++.h>
    #define il inline
    #define vd void
    #define mod 998244353
    typedef long long ll;
    il int gi(){
        int x=0,f=1;
        char ch=getchar();
        while(!isdigit(ch)){
            if(ch=='-')f=-1;
            ch=getchar();
        }
        while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
        return x*f;
    }
    il int pow(int x,int y){
        int ret=1;
        while(y){
            if(y&1)ret=1ll*ret*x%mod;
            x=1ll*x*x%mod;y>>=1;
        }
        return ret;
    }
    int CC[5110][5110];
    il int C(int n,int m){
        if(n<m||n<0||m<0)return 0;
        return CC[n][m];
    }
    il int solve(int n,int m,int lim){
        if(n==0)return 1;
        if(n<0)return 0;
        int ans=0;
        for(int i=0;i<=m;++i)ans=(ans+1ll*((i&1)?998244352:1)*C(m,i)%mod*C(n-lim*i+m-1,m-1))%mod;
        return ans;
    }
    int inv[101];
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("in.in","r",stdin);
        freopen("out.out","w",stdout);
    #endif
        CC[0][0]=1;
        for(int i=1;i<=5109;++i){
            CC[i][0]=1;
            for(int j=1;j<=i;++j)CC[i][j]=(CC[i-1][j]+CC[i-1][j-1])%mod;
        }
        int p=gi(),s=gi(),r=gi();
        int ans=0;
        inv[1]=1;for(int i=2;i<=p;++i)inv[i]=mod-1ll*(mod/i)*inv[mod%i]%mod;
        for(int x=r;x<=s;++x)
            for(int i=1;i<=p;++i){
                if((p-i)*(x-1)+i*x<s)continue;
                ans=(ans+1ll*C(p-1,i-1)*solve(s-i*x,p-i,x)%mod*inv[i])%mod;
            }
        printf("%d
    ",1ll*ans*pow(C(s-r+p-1,p-1),mod-2)%mod);
        return 0;
    }
    
  • 相关阅读:
    服务器修改时间
    修改MySQL时区
    记录一次服务器防火墙开放端口,参考了网上一位网友的方法可行,在此记录一下
    centos7.2放行80端口
    从零开始搭建系统3.4——缓存组件开发
    从零开始搭建系统3.3——图片服务开发及部署
    从零开始搭建系统3.2——微服务注册中心开发及部署
    从零开始搭搭建系统3.1——顶级pom制定
    从零开始搭建系统2.7——Quartz安装及配置
    从零开始搭建系统2.4——Jenkins安装及配置
  • 原文地址:https://www.cnblogs.com/xzz_233/p/10220448.html
Copyright © 2020-2023  润新知