종류:이분탐색
주의점: 범위에 주의
문제는 요기 ->https://www.acmicpc.net/problem/14627
#include<iostream>
using namespace std;
long long int N, C;//파의개수, 주문받은 파닭의 수
long long int arr[10000002];
long long int ans;
long long int ramen;
long long int sum = 0;
long long int Func()
{
long long int left = 1;
long long int right = 1000000000;
while (left <= right)
{
long long int mid = (left + right) / 2;
long long int cnt = 0; //파닭에 담을수 있는 파의 길이
for (long long int i = 1; i <= N; i++)
{
cnt += arr[i] / mid;
}
if (cnt >= C) //파의 양이 더많으면 파의 길이를 더 늘리기
{
if(mid>ans)
ans = mid;
left = mid+1;
}
else
{
right = mid - 1;
}
}
return sum - ans*C;
}
int main()
{
scanf("%lld %lld", &N, &C);
for (long long int i = 1; i <= N; i++)
{
scanf("%lld", &arr[i]);
sum += arr[i];
}
printf("%lld\n", Func());
}
'알고리즘문제풀이' 카테고리의 다른 글
[백준14502]연구소 (0) | 2019.02.12 |
---|---|
[백준 2151]거울설치 (0) | 2019.02.12 |
[백준 14890]경사로 (0) | 2017.12.05 |
[백준 14889]스타트와 링크 (0) | 2017.11.30 |
[백준 14891]톱니바퀴 (0) | 2017.11.30 |