문제링크 :https://www.acmicpc.net/problem/3020
문제설명
1. 개똥벌레가 석순과 종유석으로 가득차있는 동굴에 갇혔다.
2. 개똥벌레가 최소로 석순과 종유석을 파괴하고 나갈수있는 최소 파괴 갯수와 그러한 구간을 출력하면된다.
알고리즘
1. 1번부터 i번 구간까지 그 구간으로 이동하였을때 파괴하는 종유석과 석순의 갯수를 lower_bound,upper_bound 를 이 용하여 구한다.
코드
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #include <iostream> #include <vector> #include <algorithm> using namespace std; int INF = 987654321; int main(void){ ios_base::sync_with_stdio(0); cin.tie(0); int N, H; cin >> N >> H; vector<int> bottom(N / 2), top(N / 2); for (int i = 0; i < N / 2; i++) { cin >> bottom[i] >> top[i]; } //오름 차순 정렬( lower_bound,upper_bound사용할려면 정렬되어있어야함) sort(bottom.begin(), bottom.end()); sort(top.begin(), top.end()); int result = INF; int cnt = 1; for (int i = 1; i <= H; i++) { //해당 높이에 겹치는 석순 int brk = bottom.size() - (lower_bound(bottom.begin(), bottom.end(), i) - bottom.begin()); //해당 높이에 겹치는 종유석 brk += top.size() - (upper_bound(top.begin(), top.end(), H - i) - top.begin()); if (result == brk)cnt++; //최소 파괴 수 갱신 else if (result > brk) { result = brk; cnt = 1; } } cout << result << " " << cnt << "\n"; } | cs |
'c++ > 백준' 카테고리의 다른 글
백준 1022번: 소용돌이 예쁘게 출력하기 (0) | 2020.05.27 |
---|---|
백준 2792번 : 보석상자 (0) | 2020.05.27 |
백준 10942번 : 팰린드롬? (0) | 2020.05.26 |
백준 1213번 : 팰린드롬 만들기 (0) | 2020.05.26 |
백준 1063번 : 킹 (0) | 2020.05.26 |