這道題乍一看论颅,特別沒有頭緒,心想這扭來扭去的咋算啊囱嫩,后來通過討論區(qū)get了思路恃疯,我們只需要把整個(gè)圖不斷分割就可以了,從Hn到Hn-1狀態(tài)墨闲。不過左下和右下都有翻轉(zhuǎn)今妄,廢了點(diǎn)功夫。還有就是2的30次方很大鸳碧,需要用long存儲(chǔ)才能過所有題目盾鳞。
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int n;
long x, y;
while(cin >> n >> x >> y) {
long nowa = pow(2, n) / 2;
long result = 1;
for(int i = 0; i < n; i++) {
if(x > nowa && y > nowa) { //youshang
x -= nowa;
y -= nowa;
result += 2 * nowa * nowa;
} else if(y > nowa) { //zuoshang
y -= nowa;
result += nowa * nowa;
} else if(x > nowa) { //youxia
x = 2 * nowa - x + 1;
y = nowa - y + 1;
swap(x, y);
result += 3 * nowa * nowa;
} else { //zuoxia
swap(x, y);
}
//cout <<x <<' '<< y<< ' '<< result << endl;
nowa /= 2;
}
cout << result << endl;
}
return 0;
}