Cod sursa(job #2493465)

Utilizator NeacsuMihaiNeacsu Mihai NeacsuMihai Data 16 noiembrie 2019 12:45:55
Problema Transport Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

int verif (int x, int v[], int n)
{
    if(x==0) return 256000001;

    else{int aux, nr, i;

    aux=0;
    nr=0;

    for(i=1; i<=n; i++)
    {
       // cout<<"v["<<i<<"]= "<<v[i]<<"\n";

//cout<<"aux= "<<aux<<"\nnr= "<<nr<<"\n";
        if(aux+v[i] <=x )aux=aux+v[i];

        else
        {
            nr++;
            aux=v[i];
        }

        //cout<<"!!!!\naux= "<<aux<<"\nnr= "<<nr<<"\n\n";
    }

    if(aux!=0) nr++;
    return nr;
    }
}

int v[16002];

int main()
{
    ifstream fin ("transport.in");
    ofstream fout ("transport.out");

    int n, k, i, p, u, mij, aux1, aux2;
    bool ok;

    fin>>n>>k;

    for(i=1; i<=n; i++)
    {
        fin>>v[i];
    }

    //v[n+1]=16001;

    p=1;
    u=256000000;
    ok=0;

    //256 000 000

    while(p<=u && ok==0)
    {
        mij=(p+u)/2;

        aux1 = verif ( mij, v, n);
        aux2 = verif (mij-1, v, n);

        if(aux1 <= k && aux2 >k) ok=1;
        else if(aux1>k) p=mij+1;
        else if(aux2 <=k) u=mij-1;
    }

    if(ok==1) fout<<mij;
    else fout<<1;

}