Cod sursa(job #1834546)

Utilizator Gigel-FroneGigel Fronel Gigel-Frone Data 24 decembrie 2016 18:57:30
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <cstdio>

using namespace std;

int main()
{
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);

    int n, k, v[16001];
    scanf("%d%d", &n, &k);
    unsigned long long sum=0;
    int mx=0;
    for(int i=1; i<=n; i++)
    {
        scanf("%d", &v[i]);
        sum+=v[i];
        if(v[i] > mx) mx=v[i];
    }
    unsigned long long left=mx, right=sum;
    int p, ans;
    while(left <= right)
    {
        int mid=(left+right)/2;
        sum=0;
        p=1;
        for(int i=1; i<=n; i++)
        {
            if(sum+v[i] <= mid) sum+=v[i];
            else
            {
                p++;
                sum=v[i];
            }
        }
        if(p <= k)
        {
            ans=mid;
            right=mid-1;
        }
        else left=mid+1;
    }
    printf("%d", ans);

    return 0;
}