티스토리 뷰

알고리즘/BOJ

[백준] 12867 N차원 여행

세진짱 2018. 7. 13. 13:36

1부터 N까지의 좌표가 있고 좌표 중 인덱스를 골라 

그 좌표를 +1 OR -1 시킨다

이 때 중복된 곳이 있다면 0을 출력 아니라면 1을 출력한다

n은 크지만 m은 작기 때문에 결국 50개만 보면 된다

그래서 좌표압축을하고 걍 배열에 넣고 확인했다

set으로 하려다가 set에 바꿔서 넣기가 더 귀찮을 것 같아서 풀었는데

풀고나니 set<vector<int>> 이런것도 가능하다..!


역시 만능 set...


소스코드

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
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
using namespace std;
int arr[55][55];
int n, m;
int getpos(int x,vector<int>& vt) {
    return lower_bound(vt.begin(), vt.end(), x) - vt.begin();
}
int main() {
    scanf(" %d %d"&n, &m);
    vector<int> a(m), b;
    for (int i = 0; i < m; i++) {
        scanf(" %d"&a[i]);
        b.push_back(a[i]);
    }    
    sort(b.begin(), b.end());
    b.erase(unique(b.begin(), b.end()), b.end());
    int sz = b.size();
    for (int i = 1; i <= m; i++) {
        char ch; scanf(" %1c"&ch);
        if (ch == '+') arr[i][getpos(a[i-1], b)]++;
        else arr[i][getpos(a[i-1], b)]--;
        for (int j = 0; j < sz; j++) arr[i + 1][j] = arr[i][j];
    }
    for (int i = 0; i < m; i++) {
        for (int j = i + 1; j <= m; j++) {
            bool ok = true;
            for (int k = 0; k < sz; k++) {
                if (arr[i][k] != arr[j][k]) ok = false;
            }
            if (ok) {
                puts("0"); return 0;
            }
        }
    }
    puts("1");
}
cs


'알고리즘 > BOJ' 카테고리의 다른 글

[백준] 12887 경로 게임  (0) 2018.07.18
[백준] 12873 기념품  (1) 2018.07.17
[백준] 15386 Birokracija  (3) 2018.07.12
[백준] 10767 Palindromic Paths  (0) 2018.07.11
[백준] 10766 Trapped in the Haybales  (0) 2018.07.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
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 29 30 31
글 보관함