사각형을 4개로 분할하였을 때, 입력된 좌표가 어느 부분에 속하는 지 확인하여 횟수를 더해준다. 이를 사각형의 크기가 1일 때까지 분할해나가며 진행한다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N, r, c, ans;
void solve(int y, int x, int size) {
if (size == 1) return;
int subSize = size / 2;
int ny = y, nx = x;
if (y + subSize <= r) {
ans += size * (subSize);
ny += subSize;
}
if (x + subSize <= c) {
ans += subSize * subSize;
nx += subSize;
}
solve(ny, nx, subSize);
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin >> N >> r >> c;
int s = 1 << N;
solve(0, 0, s);
cout << ans;
return 0;
}