Cod sursa(job #937859)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 11 aprilie 2013 11:04:02
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <fstream>
#include <limits.h>
#define m1(a,b) (a<b?a:b)
#define m2(a,b) (a>b?a:b)
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
int n,k,v[16011],maxim=0,minim=INT_MAX;

inline bool cond(int c){
	register int i=0,j=1,oc=0;
	while(i<=k && j<=n){
		oc=0;
		while(oc+v[j]<=c && j<=n){
			oc+=v[j];
			j++;
		}
		i++;
	}
	if(i<=k)
		return true;
	return false;
}

int main(void){
	register int i,j;
	
	f>>n>>k;
	for(i=1;i<=n;i++){
		f>>v[i];
		minim=m1(v[i],minim);
		maxim+=v[i];
	}	
	
	int p=minim,u=maxim,m,sol=0;
	while(p<=u){
		m=p+(u-p)/2;
		if(!cond(m))
			p=m+1;
		else{
			u=m-1;
			sol=m;
		}
	}
	
	g<<sol;
	return 0;
}