Cod sursa(job #472391)

Utilizator robigiirimias robert robigi Data 24 iulie 2010 14:35:19
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
// Transport.cpp : Defines the entry point for the console application.
//

//#include "stdafx.h"
#include "stdio.h"

FILE *f=fopen("transport.in", "r");
FILE *g=fopen("transport.out", "w");

int n, k;
int v[16001];
int sum, max;

void read()
{
	fscanf(f, "%d%d", &n, &k);
	for (int i=1; i<=n; i++)
	{
		fscanf(f, "%d", &v[i]);
		sum+=v[i];
		if (v[i]>max) max=v[i];
	}
}


int ok(int x)
{
	int dx=0, cx=x, nr=0;
	for (int i=1; i<=n; i++)
	{
		if (v[i]+dx<=cx)
			dx+=v[i];
		else
		{
			dx=v[i];
			nr++;
		}
	}
	if (nr+1<=k) return 1;
	else
		return -1;
}


void binary(int x, int y)
{
	int lo=x, hi=y;
	int mid=0;
	while (hi-lo>0)
	{
		mid=lo+(hi-lo)/2;
		if (ok(mid)==-1) lo=mid+1;
		else hi=mid-1;
	}
	mid=lo+(hi-lo)/2;
	if (ok(mid)==1)
	{
		fprintf(g, "%d", mid);
	}
	else
		if (ok(mid+1)==1)
			fprintf(g, "%d", mid+1);
}
	


void program()
{
	binary(max, sum);
}


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