티스토리 뷰
Bessis와 Elsie가 카드게임을 한다
카드는 1~N*2까지 있고 그 중 입력으로 주어지는 N개를 Elsie가 가지고 있다
게임의 규칙은 이렇다
Elsie는 입력 순으로 카드를 낸다
처음 N/2판 까지는 카드 숫자가 큰 사람이 이긴다
나머지는 숫자가 작은 사람이 이긴다
카드를 반반 쪼개서 upper_bound를 하면 답을 찾을 수 있다!
처음에는 엘씨의 앞쪽카드 N/2개와 베씨의 뒤쪽카드 N/2
그 다음에는 반대로 하면 된다
소스코드
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 | #include <iostream> #include <set> #include <vector> #include <algorithm> using namespace std; int n; bool used[100005]; int main() { scanf(" %d", &n); vector<int> a(n),b; set<int> B, A; for (int i = 0; i < n; i++) { scanf(" %d", &a[i]); used[a[i]] = true; if (i >= n / 2) A.insert(a[i]); } for (int i = 1; i <= n * 2; i++) { if (used[i]) continue; if (b.size() != n / 2) b.push_back(i); else B.insert(i); } int ans = 0; for (int i = 0; i < n / 2; i++) { auto pos = B.upper_bound(a[i]); if (pos != B.end()) { B.erase(*pos); ans++; } else B.erase(*B.begin()); auto cpos = A.upper_bound(b[i]); if (cpos != A.end()) { A.erase(*cpos); ans++; } else A.erase(*A.begin()); } printf("%d\n", ans); } | cs |
'알고리즘 > BOJ' 카테고리의 다른 글
[백준] 14267 내리 갈굼 (0) | 2018.07.09 |
---|---|
[백준] 15782 Calculate! 2 (0) | 2018.07.09 |
[백준] 15686 치킨 배달 (2) | 2018.07.05 |
[백준] 6603 로또 (0) | 2018.07.05 |
[백준] 13701 중복 제거 (1) | 2018.07.05 |
댓글