Cod sursa(job #967120)

Utilizator erics16Spataru Eric erics16 Data 27 iunie 2013 10:11:39
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<stdio.h>
int v[100001];
int n,k;
int nrtr(int capacitate){
    int i=1,cnt=1,t=0;
    for (i=1;i<=n;i++){
        if (t+v[i]<=capacitate)
            t+=v[i];
        else{
            t=v[i];
            cnt++;
            if (cnt>k)
                return 1;
        }
    }
    return 0;
}
int main(){
freopen ("transport.in","r",stdin);
freopen ("transport.out","w",stdout);
scanf ("%d%d",&n,&k);
int i,max=0,suma=0;
for (i=1;i<=n;i++){
    scanf ("%d",&v[i]);
    if (max<v[i])
        max=v[i];
    suma+=v[i];}
int stanga,dreapta,mijloc,ult,nr;
stanga=max;
dreapta=suma+1;
ult=suma;
while (stanga<=dreapta){
    mijloc=(stanga+dreapta)/2;
    nr=nrtr(mijloc);
    if (nr==0){
        dreapta=mijloc-1;
        ult=mijloc;}
    else{
        stanga=mijloc+1;
        }}
while(nrtr(ult))++ult;
while(!nrtr(ult-1))--ult;
printf ("%d\n",ult);

return 0;}