Cod sursa(job #509431)

Utilizator cosmyoPaunel Cosmin cosmyo Data 11 decembrie 2010 01:03:27
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <cstdio>
const int N = 16005;
int n, a[N], k;
int rez(int g) {
	int i, nr = 1, s = 0;
   	
		for( i = 1; i <= n; ++i) {
			s += a[i];
			if( s > g)
				++nr, s = a[i];
		}
	return nr;
}
int cauta(int p, int u) {
	int m = (p + u) / 2;
	
	if( p == u && rez(m) <= k)
		return p;
	if(p > u )
		return p;
//	printf("%d %d %d %d\n",p,m,u,rez(m));
	if( rez(m) <= k)
		return cauta(p, m - 1);
	else
		return cauta(m + 1, u);
}
int main() {
	freopen("transport.in", "r", stdin);
	freopen("transport.out", "w", stdout);
	int i;
	scanf("%d %d", &n, &k);

		for(i = 1; i <= n; ++i)
			scanf("%d", &a[i]), a[n + 1] += a[i];

		printf("%d\n", cauta(1,a[n + 1]));
	return 0;
}