Cod sursa(job #1504758)

Utilizator andreiskiorAndrei Cristian Nastase andreiskior Data 18 octombrie 2015 11:05:31
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <fstream>

using namespace std;

int main()
{
    ifstream fin("transport.in");
    ofstream fout("transport.out");
    int s[16000],n,k,kc,sc,minim,mijloc,maxim=0,i,sol;
    fin>>n>>k;
    fin>>s[0];
    minim=s[0];
    maxim+=s[0];
    for(i=1;i<n;++i){
        fin>>s[i];
        maxim+=s[i];
        if(s[i]>minim) minim=s[i];
    }
    while(minim<=maxim&&k!=1)
    {
        mijloc=(minim+maxim)/2;
        sc=0;
        kc=0;
        for(i=0;i<n;++i)
        {
            sc+=s[i];
            if(sc>mijloc) {++kc;sc=s[i];}
        }
        if(sc!=0) ++kc;
        if(kc<=k) {sol=mijloc;maxim=mijloc-1;}
        else minim=mijloc+1;
    }
    if(k==1) fout<<maxim;
    else fout<<sol;
    return 0;
}