結果
| 問題 |
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;
}
沙耶花