Cod sursa(job #481002)

Utilizator crisojogcristian ojog crisojog Data 30 august 2010 12:56:47
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include<stdio.h>
#define nmax 16010
int n,k,v[nmax],bun;
long s1,s2;
void read()
{
	int i;
	scanf("%d%d",&n,&k);
	for(i=1;i<=n;++i)
	{
		scanf("%d",&v[i]);
		if(s1<v[i]) s1=v[i];
		s2+=v[i];
	}
}
int verif(int m)
{
	int i,p=1;
	long s=0;
	bun=0;
	for(i=1;i<=n;++i)
	{
		s+=v[i];
		if(s>m)
		{
			s=v[i];
			p++;
		}
		else
		if(s==m)
		{
			s=0;if(i!=n)p++;
			bun=1;
		}
	}
	return p;
}
void rez()
{
	long st,dr,m,s,nr=st;
	st=s1;dr=s2;
	while(st<=dr)
	{
		m=(st+dr)/2;
		s=verif(m);
		if(s<k) {dr=m-1;}
		if(s==k) {if(bun) nr=m; dr=m-1;}
		if(s>k) {st=m+1;}
	}
	printf("%ld\n",nr);
}
int main()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	
	read();
	rez();
	return 0;
}