Cod sursa(job #728571)

Utilizator PatrikStepan Patrik Patrik Data 28 martie 2012 19:58:37
Problema Transport Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
	#include<stdio.h>
	FILE *f , *g ;
	int n , k , v[16001] , ls , ld = 16000 , rez ;
	
	void citire();
	void solve();
	void tipar();
	int verif(int a);
	
	int main()
	{
		citire();
		solve();
		tipar();
		return 0;
	}
	
	void citire()
	{
		f=fopen("transport.in" , "r");
		fscanf(f , "%d %d" , &n , &k );
		for( int i = 1 ; i<= n ; ++i )
		{
			fscanf(f , "%d" , &v[i] );
			if(v[i] > ls)
				ls = v[i];
		}
		fclose(f);
	}
	
	void solve()
	{
		int mijl;
		while(ls <= ld )
		{
			mijl = (ls+ld)/2;
			if(verif(mijl) <= k)
				ld = mijl-1;
			else
				ls = mijl+1;
		}
	}
	
	int verif(int a)
	{
		int r = 1, s = 0;
		for(int i = 1 ; i<= n ; ++i )
			if(s+v[i] <= a)
				s+=v[i];
			else
			{
				s = v[i];
				r++;
			}
		rez = a;
		return r;
	}
	
	void tipar()
	{
		g=fopen("transport.out" , "w" );
		fprintf(g , "%d" , rez );
		fclose(g);
	}