문제 링크입니다: https://www.acmicpc.net/problem/3079
3079번: 입국심사
문제 상근이와 친구들은 오스트레일리아로 여행을 떠났다. 상근이와 친구들은 총 M명이고, 지금 공항에서 한 줄로 서서 입국심사를 기다리고 있다. 입국심사대는 총 N개가 있다. 각 입국심사관이 심사를 하는데 걸리는 시간은 사람마다 모두 다르다. k번 심사대에 앉아있는 심사관이 한 명을 심사를 하는데 드는 시간은 Tk이다. 가장 처음에 모든 심사대는 비어있고, 심사를 할 준비를 모두 끝냈다. 상근이와 친구들은 비행기 하나를 전세내고 놀러갔기 때문에, 지금 심사
www.acmicpc.net
재채점 결과 틀렸습니다가 나와서 다시 풀었습니다.
high를 (주어진 심사 시간 중 최대) * (상근이의 친구들)로 잡아준 뒤 이분탐색을 진행해야 오버플로우를 방지할 수 있습니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <algorithm> | |
using namespace std; | |
const int MAX = 1e5; | |
long long times[MAX]; | |
int main(void) | |
{ | |
ios_base::sync_with_stdio(0); | |
cin.tie(0); | |
long long N, M; | |
cin >> N >> M; | |
for (int i = 0; i < N; i++) | |
{ | |
cin >> times[i]; | |
} | |
sort(times, times + N); | |
long long low = 0, high = M * times[N - 1]; | |
long long result = M * times[N - 1]; | |
while (low <= high) | |
{ | |
long long mid = (low + high) / 2; | |
long long sum = 0; | |
for (int i = 0; i < N; i++) | |
{ | |
sum += mid / times[i]; | |
} | |
if (sum >= M) | |
{ | |
result = min(result, mid); | |
high = mid - 1; | |
} | |
else | |
{ | |
low = mid + 1; | |
} | |
} | |
cout << result << "\n"; | |
return 0; | |
} |


개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
백준 6198번 옥상 정원 꾸미기 (0) | 2020.03.08 |
---|---|
백준 11978번 Mowing the Field (Bronze) (0) | 2020.03.08 |
백준 10868번 최솟값 (0) | 2020.03.08 |
백준 1043번 거짓말 (0) | 2020.03.05 |
백준 11328번 Strfry (0) | 2020.03.02 |