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:;
	}
}