• 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';
    
}