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