상세 컨텐츠

본문 제목

백준 16401

카테고리 없음

by geminanolja 2025. 4. 15. 06:52

본문

https://www.acmicpc.net/problem/16401

 

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int M, N;
vector<long long> snacks;

bool CanDivide(long long len)
{
    long long total = 0;
    for (auto& snack : snacks)
    {
        total += snack / len;
    }
    return total >= M;
}

void Solve()
{
    long long left = 1;
    long long right = *max_element(snacks.begin(), snacks.end());
    long long result = 0;

    while (left <= right)
    {
        long long mid = (left + right) / 2;

        if (CanDivide(mid))
        {
            result = mid;       // 가능한 길이 → 일단 저장하고 더 긴 거 탐색
            left = mid + 1;
        }
        else
        {
            right = mid - 1;    // 너무 긴 길이 → 더 짧게 줄이기
        }
    }

    cout << result << "\n";
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> M >> N;
    snacks.resize(N);
    for (int i = 0; i < N; ++i)
    {
        cin >> snacks[i];
    }

    Solve();

    return 0;
}