티스토리 뷰
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 |
댓글