Cod sursa(job #1971661)

Utilizator Marina23Oprea Marina Marina23 Data 20 aprilie 2017 19:53:01
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>

using namespace std;

int N,K,i,Sum,St,Dr,Mij,A[16001],j,S,Nr,Rez,P[16002];

int cauta (int st,int x)
{
    int s=st,d=N,mij;
    int r=-1;
    while(s<=d)
    {
        mij=(s+d)/2;
        if(P[mij]-P[i-1]<=x)
        {
            r=mij;
            s=mij+1;
        }
        else
            d=mij-1;
    }
    return r;

}

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

    fin>>N>>K;
    Sum=0;
    for(i=1;i<=N;i++)
    {
        fin>>A[i];
        P[i]=P[i-1]+A[i];
        Sum+=A[i];
    }//for i
    St=1;
    Dr=Sum;
    while(St<=Dr)
    {
        Mij=(St+Dr)/2;
        i=1;
        Nr=0;
        while(i<=N)
        {   //cauta in vectorul P, incepand cu pozitia i, ultima pozitie <=mij, o intoarce in j
            j=cauta(i,Mij);
            if(j==-1){ Nr=K+1;break;}
            Nr++;
            i=j+1;
        }//while
        if(Nr<=K)
        {
            Dr=Mij-1;
            Rez=Mij;
        }
        else
            St=Mij+1;
    }//while
    fout<<Rez;

    fin.close ();
    fout.close();
    return 0;
}