Cod sursa(job #2256934)

Utilizator XibronSomai Norbert-Attila Xibron Data 9 octombrie 2018 13:39:01
Problema Transport Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 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 * 2;
   //u = 72;
    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 && (e+1)!=u)
    {
        meret = (e + u)/2;
        fuvar = teszt(meret, N, t);
        if(fuvar < K)
        {
            u = meret;
        }
        else if(fuvar > K)
        {
            e = meret;
        }
        else
        {
            while(fuvar == K)
            {
                meret--;
               fuvar = teszt(meret, N, t);
            }
            e=u;
        }
    }
    cout<<meret;

    return 0;
}