티스토리 뷰

백준

백준 소스코드 [C++] 1074 Z

Hani_Levenshtein 2020. 11. 1. 01:15

www.acmicpc.net/problem/1074

 

1074번: Z

한수는 2차원 배열 (항상 2^N * 2^N 크기이다)을 Z모양으로 탐색하려고 한다. 예를 들어, 2*2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. 만약, 2차원

www.acmicpc.net

백준 소스코드 [C++] 1074 Z

#include <iostream>
#include <algorithm>
#include <queue>
#include <string.h>
#include <limits.h>
#include <vector>
#include <math.h>
#include <stack>
#include <bitset>
#include <string>
typedef long long ll;
using namespace std;
int n, a, b;
ll cnt = 0;
bool flag = false;
void quad(int n, int y, int x) {
    if (n == 1) return;
    else if (a <= y+n / 2 && b <=x+ n / 2) {
        quad(n / 2, y, x);
    }
    else if (a <=y+n / 2 && b >x+ n / 2) {
        cnt = cnt + 1LL * n * n / 4;
        quad(n / 2, y, x + n / 2);
    }
    else if (a > y+n / 2 && b <= x+n / 2) {
        cnt = cnt + 2LL * n * n / 4;
        quad(n / 2, y + n / 2, x);
    }
    else {
        cnt = cnt + 3LL * n * n / 4;
        quad(n / 2, y + n / 2, x + n / 2);
    }
}
int main() {
    ios_base::sync_with_stdio(false), cin.tie(nullptr);
    cin >> n >> a >> b;
    a++, b++;
    quad(pow(2,n), 0, 0);
    cout << cnt;
    return 0;
}
댓글