Cod sursa(job #52522)

Utilizator MirageRobert Sandu Mirage Data 19 aprilie 2007 09:58:28
Problema Transport Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include<stdio.h>
int main () {
	int n,k,v[16000],i,p=-1,nr=0,a=0,u=0,m;
	FILE *in=fopen("transport.in","r"), *out=fopen("transport.out","w");
	fscanf(in,"%d%d",&n,&k);
	for(i=0;i<n;i++){
		fscanf(in,"%d",&v[i]);
		u+=v[i];
		if(v[i]>p)
			p=v[i];
	}
	for(i=0;i<n;i++){
		a+=v[i];
		if(a>p){
			a=v[i];
			nr++;
		}
	}
	if(a>0)
		nr++;
	if(nr<=k){
		fprintf(out,"%d\n",p);
		return 0;
	}
	m=(p+u)/2;
	while(m-1!=p&&m+1!=u){
		a=0;
		nr=0;
		for(i=0;i<n;i++){
			a+=v[i];
			if(a>m){
				a=v[i];
				nr++;
			}
		}
		if(a>0)
			nr++;
		if(nr<=k)
			u=m;
		else
			p=m+1;
		m=(p+u)/2;
	}
	fprintf(out,"%d\n",m);
	fclose(in);
	fclose(out);
	return 0;
}