QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#424937 | #5954. Power Swapper | sunrise2048 | 16 ✓ | 42ms | 3832kb | C++14 | 1.9kb | 2024-05-29 20:01:50 | 2024-05-29 20:01:50 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=12;
int T;
int n;
ll jc[N+5];
ll ans;
vector<int> a;
void dfs(vector<int> a,int len){
if(a.size()==1){
ans+=jc[len];
return;
}
vector<int> f;
for(int i=0;i<a.size();i+=2){
if(a[i]+1!=a[i+1]||a[i]%2==1){
f.push_back(i);
}
}
vector<int> b,c;
if(f.size()<=1){
for(int i=0;i<a.size();i+=2){
b.push_back(a[i]/2);
}
dfs(b,len+f.size());
return;
}
if(f.size()>2)return;
if(a[f[0]]==a[f[0]+1]+1&&a[f[0]]%2==1)return;
c=a;
if(a[f[0]]+1==a[f[1]+1]&&a[f[1]]+1==a[f[0]+1]){
b.clear();
swap(a[f[0]],a[f[1]]);
for(int i=0;i<a.size();i+=2){
b.push_back(a[i]/2);
}
dfs(b,len+1);
}
a=c;
if(a[f[0]+1]+1==a[f[1]+1]&&a[f[0]]+1==a[f[1]]){
b.clear();
swap(a[f[0]+1],a[f[1]]);
for(int i=0;i<a.size();i+=2){
b.push_back(a[i]/2);
}
dfs(b,len+1);
}
a=c;
if(a[f[0]]==a[f[1]]+1&&a[f[0]+1]==a[f[1]+1]+1){
b.clear();
swap(a[f[0]],a[f[1]+1]);
for(int i=0;i<a.size();i+=2){
b.push_back(a[i]/2);
}
dfs(b,len+1);
}
a=c;
if(a[f[0]+1]==a[f[1]]+1&&a[f[1]+1]==a[f[0]]+1){
b.clear();
swap(a[f[0]+1],a[f[1]+1]);
for(int i=0;i<a.size();i+=2){
b.push_back(a[i]/2);
}
dfs(b,len+1);
}
}
int main(){
jc[0]=1;
for(int i=1;i<=N;++i)jc[i]=jc[i-1]*i;
cin>>T;
for(int TT=1;TT<=T;++TT){
cin>>n;
a.clear();
ans=0;
for(int i=0;i<(1<<n);++i){
int ls;
cin>>ls;
--ls;
a.push_back(ls);
}
dfs(a,0);
printf("Case #%d: %lld\n",TT,ans);
}
return 0;
}
详细
Subtask #1:
score: 4
Accepted
Test #1:
score: 4
Accepted
time: 1ms
memory: 3740kb
input:
200 1 2 1 2 1 4 3 2 3 7 8 5 6 1 2 4 3 2 4 3 2 1 2 2 4 1 3 4 3 10 11 12 1 2 9 4 13 14 15 16 5 6 7 8 1 2 1 1 2 1 1 2 1 1 1 2 4 1 2 3 4 13 14 15 16 9 12 11 10 5 6 7 8 4 9 10 11 12 1 2 15 16 13 14 6 4 5 3 7 8 2 1 4 3 2 2 3 2 1 4 4 1 2 3 4 13 14 15 16 9 10 11 8 5 6 7 12 4 13 14 11 12 1 2 5 4 9 10 15 16 3...
output:
Case #1: 1 Case #2: 3 Case #3: 6 Case #4: 0 Case #5: 2 Case #6: 30 Case #7: 1 Case #8: 1 Case #9: 1 Case #10: 1 Case #11: 38 Case #12: 30 Case #13: 3 Case #14: 3 Case #15: 38 Case #16: 24 Case #17: 8 Case #18: 0 Case #19: 3 Case #20: 1 Case #21: 1 Case #22: 24 Case #23: 6 Case #24: 24 Case #25: 6 Ca...
result:
ok 200 lines
Subtask #2:
score: 12
Accepted
Test #2:
score: 12
Accepted
time: 42ms
memory: 3832kb
input:
200 1 2 1 2 1 4 3 2 3 7 8 5 6 1 2 4 3 2 4 3 2 1 6 33 34 35 36 37 38 39 40 41 42 43 44 19 20 51 52 47 10 11 12 13 14 15 16 57 58 59 60 61 62 63 64 1 2 3 4 5 6 7 8 45 46 9 48 53 54 55 56 17 18 49 50 21 22 23 24 25 26 27 28 29 30 31 32 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2...
output:
Case #1: 1 Case #2: 3 Case #3: 6 Case #4: 0 Case #5: 120 Case #6: 1 Case #7: 39916800 Case #8: 2 Case #9: 0 Case #10: 720 Case #11: 0 Case #12: 30 Case #13: 40320 Case #14: 780827760 Case #15: 448560 Case #16: 51120 Case #17: 45360 Case #18: 45360 Case #19: 1 Case #20: 1 Case #21: 1 Case #22: 780827...
result:
ok 200 lines
Extra Test:
score: 0
Extra Test Passed