「AOJ121~130」の編集履歴(バックアップ)一覧に戻る
#include<stdio.h> #include<queue> #include<map> int mod[]={100000000,10000000,1000000,100000,10000,1000,100,10}; int dxs[]={1,4,-1,-4}; int main(){ int num,next,p,np,dell,turn; std::queue<int> qu; std::map<int,int> memo; qu.push(12345670); memo[1234567]=0; while(qu.empty()==false){ num=qu.front(); turn=memo[num/10]; qu.pop(); for(int i=0;i<4;i++){ p=num%10; np=p+dxs[i]; if(np<0 || 7<np || (np==3 && p==4)||(np==4 && p==3))continue; dell=((num/mod[np])%10); next=(num-dell*mod[np]+dell*mod[p])-num%10+np; if(memo.find(next/10)==memo.end()){ qu.push(next); memo[next/10]=turn+1; } } } int n; while(scanf("%d",&n)!=EOF){ for(int i=1;i<8;i++){ scanf("%d",&p); n=n*10+p; } if(memo.find(n)!=memo.end()){ printf("%d\n",memo[n]); } } }
#include<stdio.h> #include <stdlib.h> #include<string.h> int dxs[]={2,2,1,0,-1,-2,-2,-2,-1,0,1,2}; int dys[]={0,1,2,2,2,1,0,-1,-2,-2,-2,-1}; int px[]={-1,0,1,-1,0,1,-1,0,1}; int py[]={-1,-1,-1,0,0,0,1,1,1}; void setMap(int x,int y){ int nx,ny,ox=x,oy=y,jx,jy,count,n,xx,yy; scanf("%d",&n); int map[10][10],nMap[10][10]; memset(map,0,400); memset(nMap,0,400); map[y][x]=1;
for(int i=0;i<n;i++){ scanf("%d %d",&nx,&ny); count=0; for(int j=0;j<9;j++){ jx=ox+px[j]; jy=oy+py[j]; if(jx<0 || 9<jx || jy<0 || 9<jy || map[jy][jx]==0) continue; for(int k=0;k<12;k++){ xx=jx+dxs[k]; yy=jy+dys[k]; if(xx<0 || 9<xx || yy<0 || 9<yy) continue; if(abs(xx-nx)<2 && abs(yy-ny)<2){ nMap[yy][xx]=1; count++; } } } memcpy(map,nMap,400); memset(nMap,0,400); ox=nx; oy=ny; } if(count>0){ printf("OK\n"); }else{ printf("NA\n"); } } int main(){ int x,y; while(1){ scanf("%d %d",&x,&y); if(x==0 && y==0) break; setMap(x,y); } }