本文最后更新于 1170 天前,其中的信息可能已经有所发展或是发生改变。
// ZOJ - 1130 Ouroboros Snake.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string.h>
#include <string>
#define eps 1e-8
#define op operator
#define MOD 10009
#define MAXN 100100
#define INF 0x7fffffff
#define MEM(a,x) memset(a,x,sizeof a)
#define ll __int64
const int M = (int)(1 << 16);
using namespace std;
int list[M];
int ans[M];
int len;
int m;
void dfs(int v)
{
int w;
// cout<<"vvv "<<v<<" list "<<list[v]<<endl;
while (list[v]<2)
{
w = v * 2 + list[v]; list[v]++;
// cout<<"wwww "<<w<<endl;
// cout<<"w&m "<<(w&m)<<endl;
dfs(w&m);
// cout<<"len "<<len<<" ww "<<w<<endl;
ans[len++] = w;
}
}
int main()
{
//freopen("ceshi.txt","r",stdin);
int n, k;
while (scanf("%d%d", &n, &k) != EOF)
{
if (n == 0 && k == 0) break;
MEM(list, 0);
len = 0;
m = (1 << (n - 1)) - 1;
dfs(0);
while (k--)
len--;
printf("%d\n", ans[--len]);
}
return 0;
}
Post Views: 178