Cod sursa(job #1484018)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 10 septembrie 2015 12:59:19
Problema Transport Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.66 kb
#include<stdio.h>
int a[16001],n,i,k,s[16001],x,c,t,j,m,p,r,q;
int main() {
	freopen("transport.in","r",stdin),freopen("transport.out","w",stdout),scanf("%d%d",&n,&k);
	for(i=1;i<=n;i++)
		scanf("%d",a+i),s[i]=s[i-1]+a[i],m=m<a[i]?a[i]:m;
	p=m,q=s[n];
	if(k>=n)
		printf("%d",m);
	else if(k==1)
        printf("%d",s[n]);
	else {
		while(p<=q) {
       		for(r=(p+q)/2,i=1,t=x=0;i<=n;)
       		if(s[i]-s[t]<=r)
               	i++;
       		else
               	t=i-1,x++;
       		if(s[n]-s[t]<=r)
               	x++;
       		if(x>k)
               	p=r+1;
       		else
               	q=r-1;
		}
		if(x>k)
       		r++;
		printf("%d",r);
	}
}