Cod sursa(job #340517)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 15 august 2009 09:25:30
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <stdio.h>
#define INF 256000001
#define ll long
#define Nmax 16005

ll sum;
int a[Nmax];
int n,k,i,rez,max;

int numar(int x){
	int i; int sum=0,nrcam=1;
	for(i=1; i<=n ; ++i){
   	if( sum + a[i] <=x) sum+=a[i];
      else{ sum=a[i]; nrcam++; }
   }
   if(nrcam <=k )return 1;
   return -1;
}

int caut_bin(int l,int r){
	int m,rez,x;
   while(l<=r){
   	m=l+(r-l)/2;
   	x = numar(m);
      if(x != -1){ rez=m; r=m-1; }
      else l=m+1;
   }
   return rez;
}

int main(){
	freopen("transport.in","r",stdin);
   freopen("transport.out","w",stdout);
   scanf("%d%d",&n,&k);
   max=0;
   for(i=1;i<=n;++i){
   	 scanf("%d",&a[i]);
       if(a[i] > max) max=a[i];
   }

   rez=caut_bin(max,INF);

   printf("%d\n",rez);
   fclose(stdin); fclose(stdout);
   return 0;
}