QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#424742#5954. Power Swapperhai16 ✓41ms3832kbC++141.8kb2024-05-29 16:30:162024-05-29 16:30:16

Judging History

你现在查看的是最新测评结果

  • [2024-05-29 16:30:16]
  • 评测
  • 测评结果:16
  • 用时:41ms
  • 内存:3832kb
  • [2024-05-29 16:30:16]
  • 提交

answer

# include <bits/stdc++.h>
using namespace std;
int n;
vector<int> v;
long long jie[15];
long long dfs(vector<int> v,int n,int k)
{
    if(n==0)
        return jie[k];
    int pos=0;
    for(int i=0;i<1<<n;i+=2)
        if(!(v[i]%2 && v[i+1]==v[i]+1))
            pos++;
    if(pos==0 || pos==1)
    {
        vector<int> v2(1<<(n-1));
        for(int i=0;i<1<<n;i+=2)
            v2[i/2]=(v[i]+1)/2;
        return dfs(v2,n-1,k+pos);
    }
    else if(pos==2)
    {
        vector<int> v2(1<<(n-1));
        int pos1=-1,pos2=-1;
        for(int i=0;i<1<<n;i+=2)
            if(!(v[i]%2 && v[i+1]==v[i]+1))
            {
                if(pos1==-1)
                    pos1=i;
                else
                    pos2=i;
            }
        long long ans=0;
        for(int p1=pos1;p1<=pos1+1;p1++)
            for(int p2=pos2;p2<=pos2+1;p2++)
            {
                swap(v[p1],v[p2]);
                bool flag=0;
                for(int i=0;i<1<<n;i+=2)
                    if(!(v[i]%2 && v[i+1]==v[i]+1))
                    {
                        flag=1;
                        break;
                    }
                if(!flag)
                {
                    for(int i=0;i<1<<n;i+=2)
                        v2[i/2]=v[i+1]/2;
                    ans+=dfs(v2,n-1,k+1);
                }
                swap(v[p1],v[p2]);
            }
        return ans;
    }
    else
        return 0;
}
void solve(int testid)
{
    cin>>n;
    v.resize(1<<n);
    for(int i=0;i<1<<n;i++)
        cin>>v[i];
    cout<<"Case #"<<testid<<": "<<dfs(v,n,0)<<endl;
}
int main()
{
    jie[0]=1;
    for(int i=1;i<=12;i++)
        jie[i]=jie[i-1]*i;
    int T;
    cin>>T;
    for(int t=1;t<=T;t++)
        solve(t);
    return 0;
}

詳細信息

Subtask #1:

score: 4
Accepted

Test #1:

score: 4
Accepted
time: 1ms
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
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: 41ms
memory: 3660kb

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