1074번 Z

뻔한·2020년 4월 14일
0

Divide & Conquer

목록 보기
8/10

문제 링크

Z

문제 풀이

사각형을 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;
}
profile
ㄷㄷㄷㅈ

0개의 댓글