結果
問題 |
No.93 ペガサス
|
ユーザー |
![]() |
提出日時 | 2025-09-08 11:16:25 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 48 ms / 5,000 ms |
コード長 | 1,279 bytes |
コンパイル時間 | 1,395 ms |
コンパイル使用メモリ | 162,352 KB |
実行使用メモリ | 22,784 KB |
最終ジャッジ日時 | 2025-09-08 11:16:28 |
合計ジャッジ時間 | 2,779 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 16 |
ソースコード
#include<bits/stdc++.h> #define int long long using namespace std; const int N=1e3+10,mod=1e9+7; int n,dp[N][N][2][2]; inline int add(int a,int b){ return ((a%mod)+(b%mod)+mod+mod)%mod; } inline int mul(int a,int b){ return ((a%mod)*(b%mod))%mod; } signed main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); cin>>n; dp[1][0][0][0]=1; dp[2][0][0][0]=2; for(int i=3;i<=n;i++){ for(int j=0;j<=i-2;j++){ dp[i][j][0][0]=add(dp[i][j][0][0],mul(dp[i-1][j][0][0],i-j-2)); dp[i][j][0][0]=add(dp[i][j][0][0],mul(dp[i-1][j][1][0],i-j-1)); dp[i][j][0][0]=add(dp[i][j][0][0],add(mul(dp[i-1][j+1][1][0],j),mul(dp[i-1][j+1][0][0],j+1))); dp[i][j][0][0]=add(dp[i][j][0][0],add(dp[i-1][j+1][0][1],dp[i-1][j+1][1][1])); dp[i][j][1][0]=add(dp[i][j][1][0],add(mul(dp[i-1][j][0][1],i-j-2),mul(dp[i-1][j][1][1],i-j-1))); dp[i][j][1][0]=add(dp[i][j][1][0],add(mul(dp[i-1][j+1][1][1],max(j-1,0ll)),mul(dp[i-1][j+1][0][1],j))); dp[i][j][0][1]=(((j)?dp[i-1][j-1][0][0]*2+dp[i-1][j-1][1][0]:0)+dp[i-1][j][1][0])%mod; dp[i][j][1][1]=(((j)?dp[i-1][j-1][0][1]*2+dp[i-1][j-1][1][1]:0)+dp[i-1][j][1][1])%mod; } } cout<<dp[n][0][0][0]; return 0; }