Cod sursa(job #482816)

Utilizator andunhillMacarescu Sebastian andunhill Data 5 septembrie 2010 14:09:03
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<fstream>
using namespace std;
#define oo 1<<30
ifstream f("transport.in");
ofstream g("transport.out");
long stiva[16001];
long rez,N,K;
int good(int cap)
{	int i=1,j=0,s,k;
	while(i<=N && j<=K)
	{	for(s=0,k=i;k<=N;k++)
		{	s+=stiva[k];
			if(s>cap)  break; 
		}
		i=k;
		j++;
	}
	if(j<=K)
		return 1;
	return 0;
}
void search(int left,int right)
{	if(left>right)
		return;
	int mid=(left+right)>>1;
	if(good(mid))
	{	rez=mid;
		search(left,mid-1);
	}
	else
		search(mid+1,right);
}

int main()
{	int i,maxim=-oo;
	f>>N>>K;
	for(i=1;i<=N;i++)
	{	f>>stiva[i];
		stiva[0]+=stiva[i];
		if(maxim<stiva[i]) maxim=stiva[i];
	}
	search(maxim,stiva[0]);
	g<<rez;
	f.close();
	g.close();
	return 0;
}