Cod sursa(job #307755)

Utilizator aladinaladin aladinn aladin Data 24 aprilie 2009 22:20:41
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{int kkk,nr=256000003,q,w,n,k,s,v[16000],i,j,mij;

 freopen("transport.in","r",stdin);
 freopen("transport.out","w",stdout);
 scanf("%d %d",&n,&k);v[0]=0;j=0;
 for (i=1;i<=n;i++) {scanf("%d",&mij);if (mij>j) j=mij; v[i]=mij+v[i-1];}
 for (i=j,j=v[n];i<=j;)
 {mij=(i+j)/2;q=1;
  for (kkk=0,s=mij;(s<=mij*k) && (q<=n) && (kkk<=k);kkk++)
   {int* p = upper_bound(v+1, v+n+1, s);
    w=p-v;
	if ((w==q) || (v[w-1]-v[q-1]>mij)) {q=1;break;}
	s=v[w-1]+mij;
	q=w;
   }
 if (q==n+1) {if (mij<nr) nr=mij; j=mij-1;} else
 i=mij+1;	 
 }
 printf("%d",nr);
 return 0;}