結果
問題 |
No.3123 Inversion
|
ユーザー |
![]() |
提出日時 | 2025-04-19 11:04:25 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 970 ms / 10,000 ms |
コード長 | 2,520 bytes |
コンパイル時間 | 5,132 ms |
コンパイル使用メモリ | 258,452 KB |
実行使用メモリ | 120,960 KB |
最終ジャッジ日時 | 2025-04-19 11:05:01 |
合計ジャッジ時間 | 32,272 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 21 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:136:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 136 | scanf("%d",&n); | ~~~~~^~~~~~~~~
ソースコード
#include <stdio.h> #include <atcoder/all> #include <bits/stdc++.h> using namespace std; using namespace atcoder; using mint = modint; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000001 #define Inf64 4000000000000000001LL vector<int> get(vector<int> p){ vector<int> res(p.size()); rep(i,p.size()){ res[p[i]] = i; } return res; } vector<int> op(vector<int> p,vector<int> q){ vector<int> res(p.size()); rep(i,p.size()){ res[i] = p[q[i]]; } return res; } mint f0[5000006],f1[5000006],f2[5000006],f3[5000006],f4[5000006],f5[5000006]; void p(mint n){ printf("%d\n",n.val()); } mint gu(int n){ vector<int> p(n); rep(i,n)p[i] = i; mint res = 0; do{ set<vector<int>> s; s.insert(p); rep(_,2){ auto x = p; rep(i,10){ if(i%2==_){ reverse(x.begin(),x.end()); } else x = get(x); s.insert(x); } } res += s.size(); } while(next_permutation(p.begin(),p.end())); return res; } int main(){ /* int n; cin>>n; vector<int> p(n); rep(i,n)p[i] = i; vector<int> c(1<<5); vector<int> rev(n); rep(i,n)rev[i] = n-i-1; do{ int cur = 0; if(p==get(p))cur++; if(p==op(rev,get(p)))cur+=2; if(p==op(get(p),rev))cur+=4; if(p==op(rev,op(p,rev)))cur+=8; if(p==op(rev,op(get(p),rev)))cur+=16; c[cur]++; } while(next_permutation(p.begin(),p.end())); rep(i,1<<5){ if(c[i]==0)continue; cout<<bitset<5>(i)<<' '<<c[i]<<endl; } */ int _t,M; cin>>_t>>M; mint::set_mod(M); f1[0] = 1; f4[0] = 1; for(int i=1;i<=5000000;i++){ f1[i] = f1[i-1]; if(i>=2){ f1[i] += f1[i-2] * (i-1); } f4[i] = f1[i]; } f5[0] = 1; f5[1] = 1; for(int i=2;i<=5000000;i++){ f5[i] = f5[i-2]; if(i>=4)f5[i] += f5[i-4] * ((i-2)/2); f5[i] *= 2; } f2[0] = 1; f2[1] = 1; for(int i=2;i<=5000000;i++){ f2[i] = f2[i-2] * (i/2) * 2; } f3[0] = 1; f3[1] = 1; for(int i=2;i<=5000000;i++){ if(i-4>=0){ f3[i] = f3[i-4] * ((i-2)/2) * 2; } } f0[0] = 1; rep(i,5000000){ f0[i+1] = f0[i] * (i+1); } rep(i,5000001){ f4[i] -= f5[i]; f2[i] -= f5[i]; f1[i] -= f5[i]; f2[i] -= f3[i]; f0[i] -= f1[i] + f2[i] + f3[i] + f4[i] + f5[i]; }/* cout<<f0[n].val()<<endl; cout<<f1[n].val()<<endl; cout<<f2[n].val()<<endl; cout<<f3[n].val()<<endl; cout<<f4[n].val()<<endl; cout<<f5[n].val()<<endl; **/ rep(_,_t){ int n; scanf("%d",&n); if(n==1){ p(1); continue; } p(f0[n] * 8 + f1[n] * 4 + f2[n] * 4 + f3[n] * 2 + f4[n] * 4+ f5[n] * 2); //p(f4[n]); //p(gu(n)); // p(fn[n]); // p(f3[n]); } return 0; }