Cod sursa(job #183787)

Utilizator drag0shSandulescu Dragos drag0sh Data 22 aprilie 2008 16:19:01
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>
FILE *f,*g;
int n,rez,v[16005],max,k;
long long s;
void citire(){
    fscanf(f,"%d %d",&n,&k);
    int i;
    for(i=1;i<=n;i++){
        fscanf(f,"%d",&v[i]);

        max=v[i]>max?v[i]:max;
        s+=v[i];
    }
 }
int ok(long h){
    int i,c;
 long sac;
    sac=0;
    c=1;
     for(i=1;i<=n;i++){

         if(sac+v[i]>h) {sac=0;c++;}
         sac+=v[i];
     }
      if(c<=k)return 1;
      return 0;
}

long long cautare(long long prim,long long ultim){
    if(prim>ultim)return -1;
    long long m;
    m=(prim + ultim)/2;
    if(ok(m)){ rez=m;return cautare(prim,m-1);}
    return cautare(m+1,ultim);
}
int main(){
f=fopen("transport.in","r");
g=fopen("transport.out","w");
citire();
cautare(max,s);
fprintf(g,"%ld",rez);
int m;
//while(p<u){
   // m=(prim+ultim)/2;
    //if(ok)




fclose(f);
fclose(g);
return 0;
}