AOJ 0556 - タイル

競技プログラミングはじめたとき見た問題でしたが,
ただ計算するだけなので簡単でした.(数字の扱いは難しいですが)

#include <iostream>
#include <cstdio>

void swap(int& x, int& y){
	x ^= y;
	y ^= x;
	x ^= y;
}

int main(){
	int n, m;
	std::cin >> n >> m;
	for(;m--;){
		int x, y;
		std::cin >> x >> y;
		x--, y--;//(0,0)を起点とする
		
		//つくった図形は点対称なので反転とかy=xに関して対象移動したりできる
		if(x > n/2){//真ん中より右なら反転する
			x = n-1 - x;
		}
		if(y > n/2){//真ん中より下なら反転する
			y = n-1 - y;
		}
		if(y > x){//y=xより下ならばy=xに関して対称移動する
			swap(x, y);
		}
		x = y;

		printf("%d\n", x%3+1);
	}
}