結果
問題 |
No.3123 Inversion
|
ユーザー |
|
提出日時 | 2025-04-20 16:00:15 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2,388 ms / 10,000 ms |
コード長 | 1,215 bytes |
コンパイル時間 | 11,980 ms |
コンパイル使用メモリ | 354,560 KB |
実行使用メモリ | 120,444 KB |
最終ジャッジ日時 | 2025-04-20 16:01:22 |
合計ジャッジ時間 | 61,742 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 21 |
ソースコード
#pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include<bits/stdc++.h> #include<atcoder/all> using namespace std; using namespace atcoder; using ll=long long; using mint=modint; const ll inf=(1e9+7)*(1e9+7); int dx[4]={1,0,0,-1},dy[4]={0,1,-1,0}; const int mod=998244353; using P=pair<ll,int>; int main(){ int t,m,n; cin>>t>>m; mint::set_mod(m); int MAX_N=5e6; vector<mint>A000142(MAX_N+1),A000085(MAX_N+1),A037223(MAX_N+1),A037224(MAX_N+1),A135401(MAX_N+1),ans(MAX_N+1); for(int i=1;i<=MAX_N;i++){ if(i==1) A000142[i]=1; else A000142[i]=A000142[i-1]*i; if(i<=2) A000085[i]=i; else A000085[i]=A000085[i-1]+A000085[i-2]*(i-1); if(i<=2) A037223[i]=i; else if(i%2==1) A037223[i]=A037223[i-1]; else A037223[i]=A037223[i-1]*i; if(i==1) A037224[i]=1; else if(i%4==2) A037224[i]=0; else if(i%2==1) A037224[i]=A037224[i-1]; else A037224[i]=A037224[i-3]*(i-2); if(i<=2) A135401[i]=i; else if(i%2==1) A135401[i]=A135401[i-1]; else A135401[i]=A135401[i-1]*2+A135401[i-3]*(i-2); if(i==1) ans[i]=1; else ans[i]=8*A000142[i]-8*A000085[i]-4*A037223[i]-2*A037224[i]+6*A135401[i]; } while(cin>>n) cout<<ans[n].val()<<endl; }