Cod sursa(job #732765)

Utilizator Stefex09Stefan Teodorescu Stefex09 Data 10 aprilie 2012 22:01:43
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include<iostream>
#include<fstream>
using namespace std;
int n,k,x[16100];
ifstream in("transport.in");
ofstream out("transport.out");
void read()
{
	int i;
	in>>n>>k;
	for(i=1;i<=n;i++)
		in>>x[i];
}

bool ok(int t)
{
	int i,j=0,s;
	for(i=1;i<=k;i++){
		s=0;
		while(s<=t && j<=n){
			j++;
			s+=x[j];
		}
		j--;
		s-=x[j];
	}
	return (j==n);
}

void solve()
{
	int i,max=0,s=0,last=-1,st,dr,m;
	for(i=1;i<=n;i++){
		if(x[i]>max)
			max=x[i];
		s+=x[i];
	}
	st=max;
	dr=s;
	while(st<=dr){
		m=(st+dr)>>1;
		if(ok(m)){
			last=m;
			dr=m-1;
		}
		else
			st=m+1;
	}
	out<<last;
}

int main()
{
	read();
	solve();
	return 0;
}