結果
| 問題 | No.1001 注文の多い順列 |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2026-10-19 23:42:28 |
| 言語 | C++23(gnu拡張gcc16) (gcc 16.2.0 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 49 ms / 2,000 ms |
| + 427µs | |
| コード長 | 846 bytes |
| 記録 | |
| コンパイル時間 | 4,604 ms |
| コンパイル使用メモリ | 350,672 KB |
| 実行使用メモリ | 57,548 KB |
| 最終ジャッジ日時 | 2026-10-19 23:42:38 |
| 合計ジャッジ時間 | 7,763 ms |
|
ジャッジサーバーID (参考情報) |
judge6_0 / judge5_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 30 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=3005,mod=1e9+7;
int n,s1[N],s2[N],c2[N],fac[N];
int f[N],g[N],C[N][N];
signed main(){
ios::sync_with_stdio(0);cin.tie(0);
cin>>n;
C[0][0]=fac[0]=1;
for(int i=1;i<=n;i++){
C[i][0]=1;fac[i]=fac[i-1]*i%mod;
for(int j=1;j<=i;j++){
C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
}
}
for(int i=1,op,x;i<=n;i++){
cin>>op>>x;
if(op==1) s1[x]++;
else s2[x]++,c2[x]++;
}
for(int i=1;i<=n;i++) s1[i]+=s1[i-1],s2[i]+=s2[i-1];
f[0]=1;
for(int i=1;i<=n;i++){
for(int j=0;j<=i;j++) g[j]=f[j],f[j]=0;
for(int j=0;j<=i;j++){
(f[j]+=g[j]*(s1[i]-((i-1-j)-s2[i-1])))%=mod;
(f[j+1]+=g[j])%=mod;
}
for(int j=0;j<=i;j++) g[j]=f[j],f[j]=0;
for(int j=c2[i];j<=i;j++){
(f[j-c2[i]]+=g[j]*C[j][c2[i]]%mod*fac[c2[i]]%mod)%=mod;
}
}
cout<<f[0];
return 0;
}
vjudge1