Cod sursa(job #356793)

Utilizator pirvupirvu tudor pirvu Data 16 octombrie 2009 13:04:22
Problema Transport Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include<cstdio>

int n,k;

const int N = 1<<15;

int v[1<<15];

bool transport ( int q)
{
int x=0,nr=1;
for (int i=1;i<=n;i++)
	if (v[i]>q) return 0;
	else if (x+v[i]<=q)
		{
           x+=v[i];
		}
	else
    {
    nr++;
    x=v[i];
    }
   if (nr>k)
   return 0;
return 1;
}


int cautare()
{
	int i, pas=N;
	
	for (i=0;pas;pas>>=1)
		if (transport(i+pas)==0)
			i+=pas;
	
		
	return i+1;
	
}

int main()
{
	
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	
	scanf("%d%d", &n , &k);
	
	for (int i=1;i<=n;i++)
		scanf("%d", &v[i]);
	
	int o= cautare();
	
	printf("%d", o);
	
	return 0;
}