Cod sursa(job #2257007)

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

    return 0;
}