using namespace std; int tim=1; const int maxn=10000+5; const int inf=0x3f3f3f3f; int a[1000+5][1000+5],res[maxn]; int dx[]={-1,0,1,1,0,-1}; int dy[]={1,2,1,-1,-2,-1}; bool can[6]; int vis[6]; int (int nx,int ny) { for(int i=1;i<=5;i++) can[i]=true; for(int i=0;i<6;i++){ if(nx+dx[i]>=0 && ny+dy[i]>=0 && nx+dx[i]<1000+5 && ny+dy[i]<1000+5) {can[a[nx+dx[i]][ny+dy[i]]]=false;} } int tmp=inf,res=0; for(int i=5;i>=1;i--) if(tmp>=vis[i] && can[i]) {tmp=vis[i],res=i;} return res; } void dfs(int dep,int sx,int sy) { if(tim>10000) return; sx++,sy++; a[sx][sy]=getans(sx,sy);vis[a[sx][sy]]++;tim++;res[tim]=a[sx][sy]; for(int i=0;i<dep-1;i++){ sy=sy+2;a[sx][sy]=getans(sx,sy);vis[a[sx][sy]]++;tim++;res[tim]=a[sx][sy]; } for(int i=0;i<dep;i++){ sx=sx-1;sy=sy+1;a[sx][sy]=getans(sx,sy);vis[a[sx][sy]]++;tim++;res[tim]=a[sx][sy]; } for(int i=0;i<dep;i++){ sx=sx-1;sy=sy-1;a[sx][sy]=getans(sx,sy);vis[a[sx][sy]]++;tim++;res[tim]=a[sx][sy]; } for(int i=0;i<dep;i++){ sy=sy-2;a[sx][sy]=getans(sx,sy);vis[a[sx][sy]]++;tim++;res[tim]=a[sx][sy]; } for(int i=0;i<dep;i++){ sy=sy-1;sx=sx+1;a[sx][sy]=getans(sx,sy);vis[a[sx][sy]]++;tim++;res[tim]=a[sx][sy]; } for(int i=0;i<dep;i++){ sx=sx+1;sy=sy+1;a[sx][sy]=getans(sx,sy);vis[a[sx][sy]]++;tim++;res[tim]=a[sx][sy]; } dfs(dep+1,sx,sy); } int main() { res[1]=1; a[500][500]=1;vis[1]=1; tim=1; dfs(1,500,500); int n; scanf("%d",&n); for(int i=1;i<=n;i++) { int m;scanf("%d",&m); printf("%dn",res[m]); } return 0; }
|
近期评论