- toc {:toc}
๋ฌธ์
ํ์๋ ํฌ๊ธฐ๊ฐ 2N ร 2N์ธ 2์ฐจ์ ๋ฐฐ์ด์ Z๋ชจ์์ผ๋ก ํ์ํ๋ ค๊ณ ํ๋ค. ์๋ฅผ ๋ค์ด, 2ร2๋ฐฐ์ด์ ์ผ์ชฝ ์์นธ, ์ค๋ฅธ์ชฝ ์์นธ, ์ผ์ชฝ ์๋์นธ, ์ค๋ฅธ์ชฝ ์๋์นธ ์์๋๋ก ๋ฐฉ๋ฌธํ๋ฉด Z๋ชจ์์ด๋ค.
https://upload.acmicpc.net/21c73b56-5a91-43aa-b71f-9b74925c0adc/-/preview/
N >ย 1์ธ ๊ฒฝ์ฐ, ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ 2N-1 ร 2N-1๋ก 4๋ฑ๋ถย ํ ํ์ ์ฌ๊ท์ ์ผ๋ก ์์๋๋ก ๋ฐฉ๋ฌธํ๋ค.
๋ค์ ์๋ 22 ร 22 ํฌ๊ธฐ์ ๋ฐฐ์ด์ ๋ฐฉ๋ฌธํ ์์์ด๋ค.
https://upload.acmicpc.net/adc7cfae-e84d-4d5c-af8e-ee011f8fff8f/-/preview/
N์ด ์ฃผ์ด์ก์ ๋, rํย c์ด์ ๋ช ๋ฒ์งธ๋ก ๋ฐฉ๋ฌธํ๋์ง ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๋ค์์ N=3์ผ ๋์ ์์ด๋ค.
https://upload.acmicpc.net/d3e84bb7-9424-4764-ad3a-811e7fcbd53f/-/preview/
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ N, r, c๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
rํ c์ด์ ๋ช ๋ฒ์งธ๋ก ๋ฐฉ๋ฌธํ๋์ง ์ถ๋ ฅํ๋ค.
์ ํ
- 1 โค N โค 15
- 0 โค r, c <
์ถ์ฒ:https://www.acmicpc.net/problem/1074
ํ์ด
๊ท๋ฉ์ ์ผ๋ก ์๊ฐํ์ ๋ 0๋ฒ์๋ฆฌ๊ฐ ๋ค์ ์๋ฆฌ์ ์ํฅ์ ๋ผ์น๊ณ ์ํฅ์ ์ดํดํ๋ฉด ๋๋ค.
#include <bits/stdc++.h>
using namespace std;
int func(int n, int r, int c){
if(n==0) return 0;
int half = int(pow(2, n-1));
if(r < half && c < half) return func(n-1, r, c);
if(r < half && c >= half) return half*half + func(n-1, r, c-half);
if(r >= half && c < half) return 2*half*half + func(n-1, r-half, c);
if(r >= half && c >= half) return 3*half*half + func(n-1, r-half, c-half);
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int N, r, c;
cin >> N >> r >> c;
cout << func(N, r, c) << '\n';
}