Cod sursa(job #1495064)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 2 octombrie 2015 15:05:11
Problema Transport Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>
#include <stdlib.h>
int v[16001];
inline int cauta(int l,int n,int k){
    int i=1,con,s;
    con=1;
    s=0;
    while(i<=n){
        if(s+v[i]<=l)
            s+=v[i];
        else{
             s=v[i];
             con++;
        }
        if(v[i]>l)
            con=k+1;
        i++;
    }
    if(con<=k)
        return 1;
    return 0;
}
int main(){
    FILE*fi,*fout;
    int rez,pas,n,k,i,s,max;
    fi=fopen("transport.in" ,"r");
    fout=fopen("transport.out" ,"w");
    fscanf(fi,"%d%d" ,&n,&k);
    s=0;
    max=0;
    for(i=1;i<=n;i++){
        fscanf(fi,"%d" ,&v[i]);
        s+=v[i];
    }
    rez=0;
    for(pas=1<<30;pas;pas>>=1){
       if(rez+pas<=s&&cauta(rez+pas,n,k)==0)
           rez+=pas;
    }
    fprintf(fout,"%d" ,rez+1);
    fclose(fi);
    fclose(fout);
    return 0;
}