結果
| 問題 | No.1001 注文の多い順列 |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2026-10-05 16:48:47 |
| 言語 | C++23(gnu拡張gcc16) (gcc 16.1.0 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 121 ms / 2,000 ms |
| + 649µs | |
| コード長 | 652 bytes |
| 記録 | |
| コンパイル時間 | 4,799 ms |
| コンパイル使用メモリ | 356,288 KB |
| 実行使用メモリ | 49,792 KB |
| 最終ジャッジ日時 | 2026-10-05 16:49:08 |
| 合計ジャッジ時間 | 5,763 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 31 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=3005,M=1e9+7;
int n,a[N],b[N],c1,c2,f[N][N];
signed main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n;
for(int i=1,t,x;i<=n;i++){
cin>>t>>x;
if(t)a[++c1]=x;
else b[++c2]=x;
}
sort(a+1,a+1+c1);sort(b+1,b+1+c2);
f[0][0]=1;
for(int i=1;i<=n;i++)
for(int j=0;j<=i;j++){
if(j){
int ps=upper_bound(a+1,a+1+c1,i)-a-1;
if(ps>=j)
f[j][i-j]=(f[j][i-j]+f[j-1][i-j]*(ps-j+1)%M)%M;
}
if(i-j){
int ps=lower_bound(b+1,b+1+c2,i)-b-1;
if(ps<=i-j-1)
f[j][i-j]=(f[j][i-j]+f[j][i-j-1]*(i-j-1-ps+1)%M)%M;
}
}
cout<<f[c1][c2];
}
vjudge1