드래곤 커브의 특성을 직접 그려보면


끝점을 기준으로 시계방향으로 90도 돌린다는 말의 의미를 알 수 있다.


을 n세대 i번째 선분이라고 할 때 


가 됨을 알 수 있다.


또한 선분의 양끝점을 저장할 필요 없이 움직인 방향만 기록해놓고


dx[], dy[]를 시계방향 혹은 반시계방향으로 해놓는다면 (저장된 방향 + 시작방향)%4 로 간단하게 계산이 가능하다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
 
int main() {
    int a[1 << 12= { 0, };
    int map[101][101= { 0, };
    int dx[] = { 1,0,-1,0 }, dy[] = { 0,-1,0,1 };
 
    for (int i = 1, cur = 2; i <= 10; i++, cur <<= 1for (int j = cur / 2; j < cur; j++
        a[j] = (a[cur - j - 1+ 1) % 4;
 
    int n;
    scanf("%d"&n);
    while (n--) {
        int x, y, d, g;
        scanf("%d%d%d%d"&x, &y, &d, &g);
        map[y][x] = 1;
        for (int i = 0; i < 1 << g; i++) {
            x += dx[(a[i] + d)%4];
            y += dy[(a[i] + d)%4];
            map[y][x] = 1;
        }
    }
    int res = 0;
    for (int i = 0; i < 100; i++for (int j = 0; j < 100; j++)
        res += map[i][j] & map[i + 1][j] & map[i][j + 1& map[i + 1][j + 1];
    printf("%d\n", res);
    return 0;
}
cs


'BOJ' 카테고리의 다른 글

15686 치킨 배달  (0) 2018.08.29
15683 감시  (0) 2018.08.29
2615 오목  (0) 2018.04.04
1213 팰린드롬 만들기  (0) 2018.04.04
14868 문명  (0) 2018.04.04

+ Recent posts