征集此题暴力做法的正确性证明
查看原帖
征集此题暴力做法的正确性证明
70132
AsunderSquall楼主2021/11/17 21:05

RT,甚至回溯都是不需要的,应该有正确性保证,但是我们不是很会证。

代码如下:

#include<bits/stdc++.h>
using namespace std;
int n,k,p[1<<20],v[1<<20];
vector<int>a,b;
void dfs(int x)
{
    a.push_back(x);v[x]=1;
    if(a.size()==(1<<n)){puts("1");for(int x:a)cout<<x<<" ";exit(0);}
    for(int c:b)if(!v[c^x])dfs(c^x);
}
int main()
{
    cin>>n>>k;if(k%2==0){puts("0");exit(0);}
    for(int i=0;i<(1<<n);i++)if(__builtin_popcount(i)==k)b.push_back(i);
    dfs(0);puts("0");
}
2021/11/17 21:05
加载中...