Cod sursa(job #322562)

Utilizator marinMari n marin Data 9 iunie 2009 09:55:17
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include <stdio.h>
#define DIM 16011

int V[DIM];
int n,k,p,u,i,s,m;

int can(int cap){
	int cc = 0;
	int nr = 1;
	for (i=1;i<=n;i++) {
		if (V[i]>cap)
			return 0;
		if (cc+V[i]<=cap) {
			cc+=V[i];
		} else {
			nr++;
			cc = V[i];
		}
		if (nr>k) return 0;
	}
	return nr<=k;
}

int main(){
	FILE *f = fopen("transport.in","r");
	fscanf(f,"%d %d",&n,&k);
	for (i=1,s=0;i<=n;i++){
		fscanf(f,"%d",&V[i]);
		s+=V[i];
	}
	fclose(f);
	
	p = 1; u = s;
	while (p<=u) {
		m = p+(u-p)/2;
		if (can(m))
			u = m-1;
		else
			p = m+1;
	}
	FILE *g = fopen("transport.out","w");
	fprintf(g,"%d",p);
	fclose(g);
	return 0;
}