Cod sursa(job #211981)

Utilizator AthanaricCirith Gorgor Athanaric Data 3 octombrie 2008 23:07:06
Problema Transport Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <stdio.h>
int v[16000],n,nrt,c,max,sumav;
void citire()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	scanf("%d%d",&n,&nrt);
	for (int i=1; i<=n; i++)
	{
		scanf("%d",&v[i]);
		if (v[i]>max)
			max=v[i];
		sumav+=v[i];
	}
}
int calcul(int q)
{
	int s=0,nr=0,i=1;  
    while(i<=n)  
    {  
        if (v[i]>q)
			return 16000;
		if(s+v[i]<=q)  
		{
			s+=v[i];
			i++;  
		}
        else  
		{     
            nr++;
			s=0;  
        }  
	}  
	nr++;  
    return nr;  
}

void cautbin()
{
	int st,dr,m;
	st=max; dr=sumav;
	while (st<dr)
	{
		m=(st+dr)/2;
		if(calcul(m)<=nrt)
			dr=m;
		else
			st=m+1;
	}
	if(calcul(m)<nrt)  
        m=st+1;  
    else  
        m=st;  
	printf("%d ",m);
}
int main()
{
	citire();
	cautbin();
}