[第一問]伯俊/1074:Z


1074号Zは問題の形状から分割征服を用いることを提示し,公式化しようとしたがかえって時間を浪費した.
フィールドが常に四象限で増殖していると思っている場合は、ゲームボードを減らして対応する値を増やすだけで、簡単に解けます.
# include <iostream>
# include <math.h>
using namespace std;



int main() {
	int N , r , c;
	cin >> N >> r >> c;
	int  bound = 0;
	int cnt = 0;
	while (N >= 1) {
		if (r > pow(2, N - 1) - 1 && c > pow(2, N - 1) - 1) 
		{
			bound = 3;
			r -= pow(2, N - 1) ;
			c -= pow(2, N - 1) ;
		}
		else if (r > pow(2, N - 1) - 1 && c <= pow(2, N - 1) - 1)
		{
			bound = 2;
			r -= pow(2, N - 1) ;
		}
		else if (r <= pow(2, N - 1) - 1 && c > pow(2, N - 1) - 1)
		{
			bound = 1;
			c -= pow(2, N - 1) ;
		}
		else if (r <= pow(2, N - 1) - 1 && c <= pow(2, N - 1) - 1) bound = 0;
		int q = bound * pow(4, N - 1);
		cnt += bound * pow(4, N - 1);
		N -= 1;
	}
    	cout << cnt;
	return 0;
}
また,このように解くと,境界を再設定しなければならないことに注意する.問題が大きくなりました.r,cも交換します.