Cod sursa(job #709740)

Utilizator ms-ninjacristescu liviu ms-ninja Data 8 martie 2012 16:01:02
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <cstdio>
using namespace std;

#define DIM 16005
int n,k,max,sum,sol;
int a[DIM];
void read ()
{
    int i;
    scanf ("%d%d",&n,&k);
    for (i=1; i<=n; ++i)
    {
        scanf ("%d",&a[i]);
        if (a[i]>max)
            max=a[i];
        sum+=a[i];
    }
}
void solve ()
{
   int ls=max,ld=sum,mijloc,nr,s,i;
   
   while(ls<=ld)
   {
		mijloc=(ls+ld)>>1;
		s=nr=0;
		for(i=1;i<=n;++i)
		{
			s+=a[i];
			if(s>mijloc)
			{
				s=a[i];
				++nr;
			}
		}
		++nr;
		if(nr>k)
			ls=mijloc+1;
		else
		{
			sol=mijloc;
			ld=mijloc-1;
		}
		
   }
   
}
int main ()
{
    freopen ("transport.in","r",stdin);
    freopen ("transport.out","w",stdout);    
    read ();
    solve ();
    printf ("%d",sol);
    return 0;
}