Cod sursa(job #340629)

Utilizator iulia609fara nume iulia609 Data 15 august 2009 20:12:54
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<stdio.h>
#define dim 16001
using namespace std;

int V[dim],N,K;

int gr(int n)
{ int sum, cont,i;

	sum = 0; cont = 1;
	for(i = 1; i <= N; i++)
		{
			sum += V[i];
			if(sum == n) sum = 0, cont++;
				else if(sum > n) sum = 0, cont++, i--;
		}
	return cont;
}



int cb(int in, int sf)
{ int mij,c;

	mij = (in + sf)/2;
	c = gr(mij);
	
	if(in >= sf) return mij;
		else if(c <= K) return cb(in, mij-1);
			else return cb(mij+1, sf);
}


int main()
{int i,S,max, sol;

	FILE *f = fopen("transport.in","r");
	FILE *g = fopen("transport.out", "w");
	
	fscanf(f, "%d%d", &N, &K);
	
	S = max = 0;
	for(i = 1; i <= N; i++)
		{
			fscanf(f, "%d", &V[i]);
			S += V[i];
			if(V[i] > max) max = V[i];
		}
	
	sol = cb(max, S);
	
	fprintf(g,"%d\n", sol);
	
	fclose(f);
	fclose(g);
	return 0;	
}