설명없음

백준 15685: 드래곤 커브 [C언어], 삼성 코딩 테스트

치킨먹고싶어요 2022. 6. 13. 13:51

https://www.acmicpc.net/problem/15685

 

15685번: 드래곤 커브

첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네 정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커

www.acmicpc.net

#include <iostream>
#include <cmath>
#include <vector>
#define fastio() ios::sync_with_stdio(0),cin.tie(nullptr),cout.tie(nullptr);
using namespace std;
int N;
int map[222][222];
int dy[4= {0-101};
int dx[4= {10-10};
vector<int> way[4];
void dfs(int y, int x, int d, int c, int g) {
    if (c == g) return
    map[y][x] = 1;
    dfs(y + dy[way[d][c]], x + dx[way[d][c]], d, c + 1, g);
}
int main() {
    fastio();
    cin >> N;
    for (int i = 0; i < 4; i++) {
        way[i].push_back(i); way[i].push_back((i + 1) % 4);
    }
    for (int i = 0; i < 4; i++) {
        for (int j = 1; j <= 1024; j *= 2) {
            for (int k = 0; k < j; k++) {
                way[i].push_back((way[i][k] + 2) % 4);
            }
            for (int k = j; k < j + j; k++) {
                way[i].push_back(way[i][k]);
            }
        }
    }
    int a, b, c, d; 
    for (int i = 0; i < N; i++) {
        cin >> a >> b >> c >> d;
        dfs(111 + b, 111 + a, c, 0, pow(2, d) + 1);
    }
    int cnt = 0;
    for (int i = 0; i < 222; i++) {
        for (int j = 0; j < 222; j++) {
            if (map[i][j] and map[i][j + 1] and map[i + 1][j] and map[i + 1][j + 1]) cnt++;
        }
    }
    cout << cnt;
}
 
cs