POJ 1392 Ouroboros Snake(數位歐拉)
阿新 • • 發佈:2017-12-05
%d ostream false 開頭 names += log esp clr
題目鏈接:http://poj.org/problem?id=1392
題目大意:題意看的我頭痛,其實跟HDU2894差不多,但是這題要求輸出這條路徑上第k個數,而不是輸出路徑。
解題思路:也跟HDU2894差不多。。。。
代碼:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define CLR(arr,val) memset(arr,val,sizeof(arr)) 5 using namespace std; 6 const int N=16;7 8 int n,k,cnt; 9 int ans[1<<N]; 10 bool vis[1<<N]; 11 12 void euler(int st) { 13 int s1=(st<<1)&((1<<n)-1); 14 int s2=s1+1; 15 //先試著添加0,再嘗試添加1 16 if (!vis[s1]){ 17 vis[s1]=1; 18 euler(s1); 19 ans[++cnt]=0; 20 } 21if (!vis[s2]) { 22 vis[s2]=1; 23 euler(s2); 24 ans[++cnt]=1; 25 } 26 } 27 28 void init(){ 29 CLR(vis,false); 30 CLR(ans,0); 31 cnt=0; 32 } 33 34 int main(){ 35 while(~scanf("%d%d",&n,&k)&&(n||k)){ 36 init(); 37 euler(0); 38 cnt+=n-1; //cnt此時等於2^n還要補上開頭0的n-1位 39 cnt-=k; //定位到第k個數 40 int t=0; 41 for(int i=0;i<n;i++){ 42 t=t*2+ans[cnt-i]; 43 } 44 printf("%d\n",t); 45 } 46 return 0; 47 }
POJ 1392 Ouroboros Snake(數位歐拉)