백준
백준 소스코드 [C++] 1074 Z
Hani_Levenshtein
2020. 11. 1. 01:15
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;
}