https://www.acmicpc.net/problem/1074
๋ฌธ์
ํ์๋ ํฌ๊ธฐ๊ฐ 2N × 2N์ธ 2์ฐจ์ ๋ฐฐ์ด์ Z๋ชจ์์ผ๋ก ํ์ํ๋ ค๊ณ ํ๋ค. ์๋ฅผ ๋ค์ด, 2×2๋ฐฐ์ด์ ์ผ์ชฝ ์์นธ, ์ค๋ฅธ์ชฝ ์์นธ, ์ผ์ชฝ ์๋์นธ, ์ค๋ฅธ์ชฝ ์๋์นธ ์์๋๋ก ๋ฐฉ๋ฌธํ๋ฉด Z๋ชจ์์ด๋ค.
N > 1์ธ ๊ฒฝ์ฐ, ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ 2N-1 × 2N-1๋ก 4๋ฑ๋ถ ํ ํ์ ์ฌ๊ท์ ์ผ๋ก ์์๋๋ก ๋ฐฉ๋ฌธํ๋ค.
๋ค์ ์๋ 22 × 22 ํฌ๊ธฐ์ ๋ฐฐ์ด์ ๋ฐฉ๋ฌธํ ์์์ด๋ค.
N์ด ์ฃผ์ด์ก์ ๋, rํ c์ด์ ๋ช ๋ฒ์งธ๋ก ๋ฐฉ๋ฌธํ๋์ง ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๋ค์์ N=3์ผ ๋์ ์์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ N, r, c๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
rํ c์ด์ ๋ช ๋ฒ์งธ๋ก ๋ฐฉ๋ฌธํ๋์ง ์ถ๋ ฅํ๋ค.
์ ํ
- 1 ≤ N ≤ 15
- 0 ≤ r, c < 2N
ํ์ด
#include <iostream>
using namespace std;
long long ans=0;
void z(int x, int y, int n){
if(n == 0){
return;
}
//2^n ๊ตฌํ๊ธฐ (side)
int side = 1;
for(int i=0; i<n; i++){
side *= 2;
}
int star = side/2 - 1; //2^(n-1)-1 ๊ตฌํ๊ธฐ (์ฌ๋ถ๋ฉด์ ๋๋๋ ๊ธฐ์ค์ )
long long square = (side/2)*(side/2); //2^(n-1) * 2^(n-1) ๊ตฌํ๊ธฐ (ํ ์ฌ๋ถ๋ฉด์ ๋์ด)
//์ฌ๋ถ๋ฉด ํ์ ํ ๊ณ์ฐ
int new_x, new_y, new_n;
if(x<=star && y<=star){
new_x = x; new_y = y;
ans += 0;
}
else if(x>star && y<=star){
new_x = x-(star+1); new_y = y;
ans += square;
}
else if(x <= star && y > star){
new_x = x; new_y = y - (star+1);
ans += 2 * square;
}
else if(x > star && y > star) {
new_x = x-(star+1); new_y = y-(star+1);
ans += 3 * square;
}
new_n = n--;
z(new_x,new_y,n--);
}
int main() {
int n, x, y;
cin >> n >> y >> x;
z(x,y,n);
cout << ans;
return 0;
}
TIL
ํจ์๋ฅผ ๋ฐ๋ณต๋ฌธ์ ๋๋ฆฌ๋๊ฒ๊ณผ ์ฌ๊ทํจ์๋ ๋ค๋ฅด๋ค.... ใ ใ
'๐ฆ Chango > ๐ฃ EDOC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๊ตฌ๋ฆ][C++] 10ํ E-PPER 2๋ฒ : OX ํด์ฆ (0) | 2021.09.15 |
---|---|
[BOJ G5][C++] ๋ฐฑ์ค 14891๋ฒ: ํฑ๋๋ฐํด (0) | 2021.09.08 |
[BOJ][C++] ๋ฐฑ์ค 13305๋ฒ: ์ฃผ์ ์ (0) | 2021.09.06 |
[BOJ][C++] 13458๋ฒ: ์ํ ๊ฐ๋ (0) | 2021.09.06 |
[BOJ][C++] ๋ฐฑ์ค 1259๋ฒ: ํฐ๋ฆฐ๋๋กฌ์ (0) | 2021.09.06 |