求一个最短的串,使得子串能够包括0-(2^n-1)所有的二进制
构造一个欧拉回路
顾森博文:地址
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<iomanip>
#include<iostream>
#include<queue>
#include<stack>
using namespace std;
bool sign[1500000];
int n;
string answer;
int main()
{
while(scanf("%d",&n)!=EOF)
{
int temp=(1<<n)-1;
memset(sign,false,sizeof(sign));
answer.clear();
sign[temp]=true;
answer.insert(0,n,'1');
while(temp--)
{
int ans=0;
for(int i=answer.length()-n+1; i<answer.length(); i++)
ans=ans*2+answer[i]-'0';
int ans1=ans*2;
if(!sign[ans1])
{
sign[ans1]=true;
answer+='0';
}
else
{
sign[ans1+1]=true;
answer+='1';
}
}
cout<<answer<<endl;
}
return 0;
}