Cod sursa(job #48134)

Utilizator razvi9Jurca Razvan razvi9 Data 4 aprilie 2007 13:46:59
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include<stdio.h>
long long max,s,a[16001],i,k,n;
long long ver(long long c)
{long long s=0,nr=1;
 for(i=1;i<=n;i++)
 {if(s+a[i]>c) {s=0;nr++;if(nr>k) return 0;}
  s=s+a[i];}
 return 1;}
long long caut(long long st,long long dr)
{long long mij=(st+dr)/2;
 if(st==dr) return st;
 if(ver(mij)) return caut(st,mij);
 else return caut(mij+1,dr);}
int main()
{freopen("transport.in","r",stdin);
 freopen("transport.out","w",stdout);
 scanf("%lld %lld",&n,&k);
 for(i=1;i<=n;i++)
 {scanf("%lld",&a[i]);
  if(a[i]>max) max=a[i];
  s=s+a[i];}
 if(k==1) printf("%lld",s);
 else if(k>=n) printf("%lld",max);
 else
 printf("%lld",caut(max,s));
 fclose(stdout);
 return 0;}