Cod sursa(job #40301)

Utilizator razvi9Jurca Razvan razvi9 Data 27 martie 2007 12:35:45
Problema Transport Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<stdio.h>
long long max,s,a[16000],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,nr=0;
 if(st>dr) return 0;
 if(st==dr) return ver(st)?st:0;
 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;}