P3270 [JLOI2016] 成绩比较
1.P6411 [COCI2008-2009#3] MATRICA2.AT_tenka1_2014_final_d 高橋君3.CF963D Frequency of String4.P4465 [国家集训队] JZPSTR5.P9816 少项式复合幂6.P9817 lmxcslD7.P9821 [ICPC2020 Shanghai R] Sum of Log8.AT_agc034_e Complete Compress9.CF1381D The Majestic Brown Tree Snake10.CF1914F Programming Competition11.P10033 「Cfz Round 3」Sum of Permutation12.AT_abc337_g Tree Inversion13.P10060 [SNOI2024] 树 V 图14.P10061 [SNOI2024] 矩阵15.AT_arc170_d Triangle Card Game16.AT_arc170_c Prefix Mex Sequence17.CF1928C Physical Education Lesson18.CF1928D Lonely Mountain Dungeons19.CF1928E Modular Sequence20.CF1634D Finding Zero21.P3756 [CQOI2017] 老C的方块22.P6765 [APIO2020] 交换城市
23.P3270 [JLOI2016] 成绩比较
24.P5102 [JOI 2016 Final] 领地25.AT_arc148_e ≥ K26.CF1039D You Are Given a Tree27.AT_abc374_f Shipping28.CF2021E3 Digital Village (Extreme Version)29.CF2021D Boss, Thirsty30.CF1876G Clubstep31.P11592 [NordicOI 2024] Chair Game记
先不考虑有多少人被碾压,计算出符合排名限制的方案数。枚举每门课和 B 神在每门课中的得分,选出
设
接下来计算出恰好有
最终答案即为
#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';
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】