首页 > 其他分享 >P3270 [JLOI2016] 成绩比较

P3270 [JLOI2016] 成绩比较

时间:2024-05-22 15:42:12浏览次数:22  
标签:JLOI2016 limits P3270 int ll ans 成绩 sum mod

记 \(a_i=N-R_i,n=N-1\)。

先不考虑有多少人被碾压,计算出符合排名限制的方案数。枚举每门课和 B 神在每门课中的得分,选出 \(a_i\) 个人得分小于等于他,即:

\[\prod\limits_{i=1}^m \dbinom{n}{a_i} \sum\limits_{j=1}^{U_i} j^{a_i}(U_i-j)^{n-a_i} \]

设 \(s(x)=\sum\limits_{j=1}^{x} j^{a_i}(U_i-j)^{n-a_i}\),是关于 \(x\) 的 \(n\) 次多项式,直接拉格朗日插值求出 \(s(U_i)\) 即可。

接下来计算出恰好有 \(k\) 个人被碾压的概率。设 \(f_{i,j}\) 表示仅考虑前 \(i\) 门课,恰好有 \(j\) 个人被碾压的概率。初始状态 \(f_{0,n}=1\),根据组合意义可得转移方程为:

\[f_{i,j}=\sum\limits_{p=j}^{n+j-a_i} f_{i-1,p}\times\dfrac{\tbinom{p}{j}\tbinom{n-p}{a_i-j}}{\tbinom{n}{a_i}} \]

最终答案即为 \(f_{n,k}\times \prod\limits_{i=1}^{m} s(U_i)\),时间复杂度 \(O(n^2m)\)。

#include<stdio.h>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int N=110,mod=1e9+7;
int n,m,k,U[N],a[N],s[N];
ll ans=1,P[N],I[N],f[N],g[N],dp[N][N];
inline ll ksm(ll a,int b=mod-2)
{
    ll ans=1;
    for(;b;b>>=1,a=a*a%mod)
        if(b&1) ans=ans*a%mod;
    return ans;
}
inline ll C(int n,int m)
    {return P[n]*I[m]%mod*I[n-m]%mod;}
inline ll work(int m,int k)
{
    for(int i=1;i<=min(m,n+1);++i)
        s[i]=(ksm(i,k)*ksm(m-i,n-k)+s[i-1])%mod;
    if(m<=n+1) return s[m];
    f[0]=m,g[n+2]=1;ll ans=0;
    for(int i=1;i<=n+1;++i) f[i]=(m-i)*f[i-1]%mod;
    for(int i=n+1;~i;--i) g[i]=(m-i)*g[i+1]%mod; 
    for(int i=1;i<=n+1;++i)
        ans+=I[i]*I[n+1-i]%mod*f[i-1]%mod*g[i+1]%mod*s[i]%mod*(((n+1-i)&1)?-1:1);
    return (ans%mod+mod)%mod;
}
signed main()
{
    cin>>n>>m>>k;
    P[0]=1;for(int i=1;i<=n;++i) P[i]=P[i-1]*i%mod;
    I[n]=ksm(P[n]);for(int i=n;i;--i) I[i-1]=I[i]*i%mod;
    --n,dp[0][n]=1;for(int i=1;i<=m;++i) cin>>U[i];
    for(int i=1;i<=m;++i) cin>>a[i],a[i]=n-(a[i]-1);
    for(int i=1;i<=m;++i)
        ans=ans*C(n,a[i])%mod*work(U[i],a[i])%mod;
    for(int i=1;i<=m;++i) for(int j=k;j<=a[i];++j)
    {
        for(int p=j;p<=n+j-a[i];++p)
            dp[i][j]+=C(p,j)*C(n-p,a[i]-j)%mod*dp[i-1][p]%mod;
        dp[i][j]=dp[i][j]%mod*ksm(C(n,a[i]))%mod;
    }
    cout<<ans*dp[m][k]%mod<<'\n';
}

标签:JLOI2016,limits,P3270,int,ll,ans,成绩,sum,mod
From: https://www.cnblogs.com/int-R/p/18206340/P3270

相关文章

  • 指针练习班级成绩
    1.求第一门课程的平均分2.找出有两门以上不及格的学生3.找出平均分在90分以上或全部课程在85分以上的学生#include<stdio.h>#include<math.h>#include<string.h>#defineM4#defineN5voidAverage(int*arr,intn);voidTwoFail(int*arr);voidOutputFail(int(*p)[N......
  • 提高学生学习成绩和自我效能感:护理培训的移动聊天机器人方法
    (Promotingstudents'learningachievementandself-efficacy:Amobilechatbotapproachfornursingtraining)DOI:10.1111/bjet.13158一、摘要研究目的:护理培训的目的不仅在于掌握技能,更在于培养解决问题的决策能力。然而,产科疫苗接种知识等培训项目大多采用以讲座为主......
  • P2367 语文成绩
    P2367语文成绩题目语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行。她总是要一遍遍地给某些同学增加分数,又要注意最低分是多少。你能帮帮她吗?输入第一行有两个整数\(n\),\(p\),代表学生数与增加分数的次数。第二行有\(n\)个数,\(a_1\sima_n\),代表各个学生的初始......
  • [WUSTCTF2020]颜值成绩查询
    [WUSTCTF2020]颜值成绩查询打开环境是一个成绩查询的页面1.手工注入输入1发现有admin的账号和得分输入1'会提示学号不存在1/**/or/**/1=1#过滤了空格1/**/order/**/by/**/3#存在1/**/order/**/by/**/4#不存在由此得知有3个字段1/**/union/**/select/**/1,2,......
  • ChatGPT周岁记:亲手写下成绩单,它给自己打了这样的分数
    2022年11月30日,这一天或许会被镌刻进人类历史的转折点——源自美国的人工智能研发翘楚OpenAI推出了对话式AIChatGPT,该事件不仅在全球AI业界掀起了新一轮高潮,更为罕见地被比肩为继“蒸汽机时代”、“智能手机时代”甚至“火的发现”之后的重大里程碑。此年间,被冠以“生成式人......
  • 基于springboot的大学生综合成绩管理系统3(含源码+sql+视频导入教程+文档+PPT)
    ......
  • Node.js毕业设计基于WEB的学生成绩查询系统(Express+附源码)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着信息技术的飞速发展,互联网已经深入到我们生活的每一个角落。教育领域也不例外,越来越多的学校开始利用网络技术进行教学管理。其中,学生成绩查询系统是一......
  • C语言经典例题(17) --- 最小公倍数、单词倒置、你是天才吗?、完美成绩、判断整数的奇偶
    1.最小公倍数正整数A和正整数B的最小公倍数是指能被A和B整除的最小的正整数,设计一个算法,求输入A和B的最小公倍数。输入描述:输入两个正整数A和B。输出描述:输出A和B的最小公倍数。输入:57输出:35#include<stdio.h>intmain(){inta=0;intb=0;int......
  • django基于python的学生选课成绩信息管理系统7s7c8
    随着国内外教育事业的不断发展,加快教育信息化建设已成为我国教育事业改革与发展的必然选择。我国高校招生规模不断扩大,大量的学生信息管理就成了一个非常棘手的问题。依靠传统模式的利用人工进行学生的信息管理,费时费力,严重影响了教师的工作效率。而基于网络化的学生信息管理平......
  • 学生成绩管理系统|基于Springboot的学生成绩管理系统设计与实现(源码+数据库+文档)
    学生成绩管理系统目录目录基于Springboot的学生成绩管理系统设计与实现一、前言二、系统功能设计 三、系统实现1、管理员功能模块2、学生功能模块3、教师功能模块 四、数据库设计1、实体ER图五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获......