結果
| 問題 | No.93 ペガサス |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2026-06-05 12:53:45 |
| 言語 | C++17(clang) (clang++ 22.1.2 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 23 ms / 5,000 ms |
| コード長 | 2,152 bytes |
| 記録 | |
| コンパイル時間 | 7,800 ms |
| コンパイル使用メモリ | 173,072 KB |
| 実行使用メモリ | 23,296 KB |
| 最終ジャッジ日時 | 2026-06-05 12:54:06 |
| 合計ジャッジ時間 | 9,159 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_1 |
| 純コード判定待ち |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 16 |
ソースコード
#include<bits/stdc++.h>
//#define LOCAL
using namespace std;
typedef long long ll;
const int N=1005;
const ll mod=1e9+7;
int n;
ll f[N][N][2][2];
//????????????????????????
void upd(ll &x,ll y){
x=(x+y)%mod;
if(x<0) x+=mod;
}
namespace solve1{
void calc(){
f[1][0][0][0]=1;
f[2][0][0][0]=2;
for(int i=3;i<=n;i++){
for(int j_old=0;j_old <i-1;j_old++){ // ???????
for(int a=0;a<2;a++){ // ?a?i-2?i-4????
for(int b=0;b<2;b++){ // ?b?i-1?i-3????
ll val = f[i-1][j_old][a][b];
if(val ==0) continue;
// 1a????i-1?i-3????????a=1?
if(a ==1) upd(f[i][j_old][b][1], val);
// 1b????i-1???????
upd(f[i][j_old+1][b][1], val * (2 -a) % mod);
// 2a????i-1?i-3????????b=1?????a'=0
if(b ==1 && j_old >=1){
upd(f[i][j_old-1][0][0], val);
}
// 2b??????????
ll cnt2b = (j_old -a) - b;
if(cnt2b >0 && j_old >=1){
upd(f[i][j_old-1][b][0], val * cnt2b % mod);
}
// 3??????
ll cnt3 = (i -2) - (j_old -a);
upd(f[i][j_old][b][0], val * cnt3 % mod);
}
}
}
}
cout<<f[n][0][0][0]<<endl;
}
}
int main(){
#ifdef LOCAL
freopen(".in","r",stdin);
freopen(".out","w",stdout);
#endif
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n;
f[1][0][0][0]=1,f[2][0][0][0]=2;
for(int i=3;i<=n;i++){
for(int j=0;j<i-1;j++){
for(int a=0;a<2;a++){ //i-1 & i-3
for(int b=0;b<2;b++){ //i-2 & i-4
ll w=f[i-1][j][a][b];
//???i-1 & i-3 ???
if(a && j) (f[i][j-1][0][0]+=w)%=mod;
//???i-2 & i-4 ??
if(b) (f[i][j][1][a]+=w)%=mod;
//????????
if(j-a-b>0 && j>0) (f[i][j-1][0][a]+=w*(j-a-b))%=mod;
//??i-2??
if(2-b>0) (f[i][j+1][1][a]+=w*(2-b))%=mod;
//??????
if(i-j-(2-b)>0) (f[i][j][0][a]+=w*(i-j-(2-b)))%=mod;
}
}
}
}
cout<<f[n][0][0][0];
cerr<<'\n'<<clock()*1.0/CLOCKS_PER_SEC<<'\n';
return 0;
}
vjudge1