0209-Scene in a Picture
http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=0209&lang=jp
実装するだけらしい。
実装(C++/インクルード部分省略)
int n,m; int MAP[100][100]; int DATA[4][50][50]; int t; void MakeDATA(){ for(int i=0;i<3;i++){ for(int y=0;y<m;y++){ for(int x=0;x<m;x++){ DATA[i+1][y][m-x-1]=DATA[i][x][y]; } } } } int Check(int x,int y){ for(int i=0;i<4;i++){ int t=0; for(int xx=0;xx<m;xx++){ for(int yy=0;yy<m;yy++){ if((MAP[x+xx][y+yy]==DATA[i][xx][yy])||(DATA[i][xx][yy]==-1)){ } else { t=1;xx=m;yy=m;break; } } } if(t==0){ for(int xx=0;xx<m;xx++){ if(DATA[i][xx][0]!=-1){ return xx; } } } } return -1; } int main(){ for(;;){ n=readint();m=readint(); if(n==0&&m==0) break; //scanf("%d%d",&n,&m); for(int y=0;y<n;y++){ for(int x=0;x<n;x++){ scanf("%d",&t); MAP[x][y]=t; } } for(int y=0;y<m;y++){ for(int x=0;x<m;x++){ scanf("%d",&t); DATA[0][x][y]=t; } } MakeDATA(); for(int y=0;y<n-m+1;y++){ for(int x=0;x<n-m+1;x++){ if((t=Check(x,y))>=0){ printf("%d %d\n",x+1+t,y+1); goto hakken; } } } puts("NA"); hakken:; } }