Cod sursa(job #2257029)

Utilizator XibronSomai Norbert-Attila Xibron Data 9 octombrie 2018 16:09:17
Problema Transport Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <fstream>
#include <climits>

using namespace std;

int teszt(int meret, int N, int *t)
{
    int fuvar = 0, matracok = 0;
    for(int i = 0; i < N; i ++)
    {
        if(matracok + t[i] > meret)
        {
            fuvar ++;
            matracok = t[i];
        }
        else matracok += t[i];
    }
    return fuvar + 1;
}

int main()
{
    freopen("transport.in","rt",stdin);
    freopen("transport.out","wt",stdout);

    int N, K, t[16000]= {0}, e=0, u, fuvar, meret;
    int maxi = INT_MIN;
    cin>>N>>K;
    u = 16000 * N;
   // u = 32;
    for(int i = 0; i < N; i ++)
    {
        cin>>t[i];
        if(maxi<t[i])maxi = t[i];
    }
    if(N<=K)
    {
        cout<<maxi;
        return 0;
    }
    while(e!=u)
    {
        meret = (e + u)/2;
        fuvar = teszt(meret, N, t);
        if(fuvar <= K)
        {
            u = meret;
        }
        else //if(fuvar > K)
        {
            e = meret + 1;
        }
    }
    if(teszt(e,N,t)!=K)cout<<e+1;
    else cout<<e;

    return 0;
}