七夕祭上,Vani牽着cl的手,在明亮的燈光和歡樂的氣氛中愉快地穿行。這時,在前面突然出現了一臺太鼓達人機臺,而在機臺前坐着的是剛剛被精英隊伍成員XLk、Poet_shy和lydrainbowcat拯救出來的的applepi。看到兩人對太鼓達人產生了興趣,applepi果斷閃人,因而cl拿起鼓棒準備挑戰。然而即便是在普通難度下,cl的路人本性也充分地暴露了出來。一曲終了,不但沒有過關,就連鼓都不靈了。Vani十分過意不去,決定幫助工做人員修鼓。ios
鼓的主要元件是M個圍成一圈的傳感器。每一個傳感器都有開和關兩種工做狀態,分別用1和0表示。顯然,從不一樣的位置出發沿順時針方向連續檢查K個傳感器能夠獲得M個長度爲K的01串。Vani知道這M個01串應該是互不相同的。並且鼓的設計很精密,M會取到可能的最大值。如今Vani已經瞭解到了K的值,他但願你求出M的值,並給出字典序最小的傳感器排布方案。app
給了一個子串長K,每一個字串由01組成,因此最大狀態量是2^k spa
而後dfs生成字串用map判重設計
#include<map> #include<cstdio> #include<string> #include<algorithm> #include<iostream> using namespace std; map<string,bool> ma; string s,s1; int sum=0,k; void dfs(string s1,int ans) { if(ans==sum&&ma[s1]==0) { string s2=s1.substr(0,sum); cout<<s2; exit(0); } string s2=s1.substr(ans,sum-1); if (!ma[s2+'0']) { ma[s2+'0']=1; dfs(s1+'0',ans+1); ma[s2+'0']=0; } if (!ma[s2+'1']) { ma[s2+'1']=1; dfs(s1+'1',ans+1); ma[s2+'1']=0; } } int main() { int k; scanf("%d",&k); sum=(1<<k); printf("%d ",sum); for (int i=1;i<=k;i++) s1+='0'; ma[s1]=1; dfs(s1,1); }