QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#36028 | #990. Colorful Components | Froggygua | TL | 2ms | 3568kb | C++17 | 1.8kb | 2022-06-22 21:24:41 | 2022-06-22 21:24:43 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
#define N 305
typedef long long ll;
int n,m,cnt[N],g[N][N],C[N][N],w[N],pw[N][N];
int fac[N],ifac[N];
int qpow(int a,int b){
int ans=1;
while(b){
if(b&1)ans=1LL*ans*a%mod;
a=1LL*a*a%mod;
b>>=1;
}
return ans;
}
void init(int n){
fac[0]=1;
for(int i=1;i<=n;++i){
fac[i]=1LL*fac[i-1]*i%mod;
}
ifac[n]=qpow(fac[n],mod-2);
for(int i=n-1;i>=0;--i){
ifac[i]=1LL*ifac[i+1]*(i+1)%mod;
}
w[1]=1;
for(int i=2;i<=n;++i){
w[i]=qpow(i,i-2);
}
C[0][0]=1;
for(int i=1;i<=n;++i){
C[i][0]=1;
for(int j=1;j<=i;++j){
C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
}
}
g[0][0]=1;
for(int i=1;i<=n;++i){
for(int k=1;k<=i;++k){
for(int j=1;j<=min(i,m);++j){
g[i][k]=(g[i][k]+1LL*g[i-j][k-1]*w[j]%mod*C[i][j]%mod*j)%mod;
}
}
}
for(int i=1;i<=n;++i){
for(int k=1;k<=i;++k){
g[i][k]=1LL*g[i][k]*ifac[k]%mod;
}
}
for(int i=0;i<=n;++i){
pw[i][0]=1;
for(int j=1;j<=n;++j){
pw[i][j]=1LL*pw[i][j-1]*i%mod;
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m;
vector<int> col;
for(int i=1;i<=n;++i){
int x;
cin>>x;
++cnt[x];
if(cnt[x]==1)col.push_back(x);
}
init(n);
if(col.size()==1){
cout<<(n==m?w[n]:0)<<'\n';
return 0;
}
if(n==300)while(1);
int ans=0;
for(int all=col.size();all<=n;++all){
static int dp[N];
memset(dp,0,sizeof(dp));
dp[0]=1;
int tot=0;
for(auto c:col){
int sz=cnt[c];
static int h[N];
for(int i=0;i<=tot+sz;++i)h[i]=0;
for(int i=0;i<=tot;++i){
for(int j=1;j<=sz;++j){
h[i+j]=(h[i+j]+1LL*dp[i]*g[sz][j]%mod*pw[all-j][j-1])%mod;
}
}
tot+=sz;
for(int i=0;i<=tot;++i)dp[i]=h[i];
}
ans=(ans+1LL*dp[all]*qpow(n,(int)col.size()-2))%mod;
}
cout<<ans<<'\n';
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3524kb
input:
5 3 1 1 3 1 5
output:
125
result:
ok "125"
Test #2:
score: 0
Accepted
time: 2ms
memory: 3568kb
input:
4 2 2 1 1 1
output:
7
result:
ok "7"
Test #3:
score: -100
Time Limit Exceeded
input:
300 16 2 2 2 4 5 1 5 3 5 4 2 1 4 4 4 5 2 1 5 4 3 4 5 3 5 5 1 3 1 1 2 5 5 3 3 2 5 2 3 2 2 4 2 2 2 4 4 2 2 4 1 3 3 4 1 3 3 4 3 4 3 5 5 4 3 3 1 2 1 2 5 2 2 4 3 3 5 3 2 4 3 5 1 4 5 5 2 3 2 3 4 4 5 5 5 5 4 5 3 2 4 4 4 3 5 3 1 1 3 5 5 4 5 2 5 5 5 2 2 2 3 1 5 4 1 4 3 5 1 4 4 2 5 2 2 4 5 3 4 3 3 4 2 5 1 1 3...