結果
問題 | No.2668 Trees on Graph Paper |
ユーザー | askr58 |
提出日時 | 2024-03-08 23:50:48 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 763 ms / 3,000 ms |
コード長 | 481 bytes |
コンパイル時間 | 2,684 ms |
コンパイル使用メモリ | 250,176 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-09-29 20:56:23 |
合計ジャッジ時間 | 11,660 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 33 |
ソースコード
#include <bits/stdc++.h> using namespace std; using ll=long long; int main(){ ll n,m; cin>>n>>m; vector<vector<ll>> dp(2,vector<ll>(3)); dp[0][0]=1%m; dp[0][1]=2%m; dp[0][2]=3%m; ll ans=1; for(ll i=4;i<2*n;i++){ dp[1][0]=(dp[0][1]+dp[0][0])%m; dp[1][1]=(dp[0][0]*(i-2)%m+dp[0][1]+dp[0][2])%m; dp[1][2]=(dp[0][0]*((i-2)*(i-1)%m)+dp[0][1]*(i-1)%m+dp[0][2])%m; if(i&1)ans=ans*dp[1][0]%m; swap(dp[0],dp[1]); } for(ll i=1;i<2*n;i++)ans=ans*i%m; cout<<ans<<endl; }