반응형
https://www.acmicpc.net/problem/3079
3079번: 입국심사
첫째 줄에 N과 M이 주어진다. (1 ≤ N ≤ 100,000, 1 ≤ M ≤ 1,000,000,000) 다음 N개 줄에는 각 심사대에서 심사를 하는데 걸리는 시간인 Tk가 주어진다. (1 ≤ Tk ≤ 109)
www.acmicpc.net
[ 문제풀이 ]
1. 심사대의 걸리는 시간을 arr 배열에 저장하고, 그 값 중 가장 작은 값을 저장합니다.
2. s = 0, e = Min * M + 1로 설정한 후 이분 탐색을 통해 해당 시간 안에 모두 통과가 가능하다면 e = m을 적용하고, ans = e를 해주고, 통과가 불가능하다면 s = m + 1을 적용해 줍니다.
3. 이분 탐색이 끝난 후 ans를 출력해 줍니다.
[ 소스코드 ]
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 55 | #include<iostream> #define ll long long using namespace std; int arr[100000]; int N, M; bool check(ll mid) { ll num = 0; for (int i = 0; i < N; i++) { num += mid / arr[i]; if (num >= M) { return true; } } return false; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> N >> M; int Min = 1111111111; for (int i = 0; i < N; i++) { cin >> arr[i]; Min = min(Min, arr[i]); } ll s = 0; ll e = 1LL * Min * M + 1; ll ans = 0; while (s < e) { ll m = (s + e) / 2; if (check(m)) { e = m; ans = e; } else { s = m + 1; } } cout << ans; } | cs |
반응형
'백준' 카테고리의 다른 글
[ 백준 ] 16472번 - 고냥이 (C++) (0) | 2023.08.12 |
---|---|
[ 백준 ] 9024번 - 두 수의 합 (C++) (0) | 2023.08.11 |
[ 백준 ] 18114번 - 블랙 프라이데이 (C++) (0) | 2023.08.09 |
[ 백준 ] 13537번 - 수열과 쿼리 1 (C++) (0) | 2023.08.08 |
[ 백준 ] 2465번 - 줄 세우기 (C++) (0) | 2023.08.06 |