Cod sursa(job #392542)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 7 februarie 2010 18:21:44
Problema Grupuri Scor 96
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>
#define ll long long

int a[100010], v[100010], k, n;
ll s;

int verif (ll x)
{
	int i;
	ll t=0, c;
	for (i=1; i<=n; i++) 
	{
		v[i]=a[i];
		if (v[i]>x) v[i]=x;
	}
	for (i=1; v[n]; )
	{
		for (c=x; i<=n; i++)
		{
			if (v[i]<=c) 
			{
				c-=v[i];
				v[i]=0;
			} else 
			{
				v[i]-=c;
				c=0;
			}
			if (!c) 
			{
				t++;
				break;
			}
		}
	}
	return (t>=k);
}

ll search(ll l, ll r)
{
	ll m, s=0;
	while (l<=r)
	{
		m=(l+r)/2;
		if (verif(m))
		{
			s=m;
			l=m+1;
		} else r=m-1;
	}
	return s;
}

int main()
{
	freopen("grupuri.in","r",stdin);
	freopen("grupuri.out","w",stdout);
	scanf("%d %d",&k,&n);
	int i;
	for (i=1; i<=n; i++) 
	{
		scanf("%d",&a[i]);
		s+=a[i];
	}
	printf("%lld",search(0,s));
}