Cod sursa(job #461983)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 9 iunie 2010 14:59:04
Problema Grupuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <stdio.h>
FILE*f=fopen("grupuri.in", "r");
FILE*g=fopen("grupuri.out", "w");
long long i,s,lc,kc,m,u,p,nr,aux;
char ok ;
int k,n,a[100005];

int main () {
	
	fscanf ( f, "%d %d ", &k ,&n);
	
	for ( i = 1 ; i <= n ; ++i ){
		fscanf (f , "%d", &a[i]);
		
		s += a[i] ;
	}

	p = 1; u = s / k ;
	
	while ( p <= u ) {
		
		ok = 0 ;
		
		m = p + (u - p) / 2;
		
		// m linii si k coloane
		
		lc = 0 ; kc = 0 ;
		
		/*for ( i = 1; i <= n ; ++i ){
			
			if ( a[i] >= m ) {
				//lc = lc - 1 ;
				kc ++ ;
			}
			else{
				if ( ( lc + a[i] ) % m != lc + a[i] )
					kc ++ ;
				lc = ( lc + a[i] ) % m ;
				
			}
			
		}
		
		if ( kc >= k || (kc == k && lc == m) )
			ok = 1;
		*/
		
		nr = m * k ;
		i = 1 ;
		while ( nr != 0 && i <= n ){
			if( a[i] > m )
				aux = m ;
			else
				aux = a[i] ;
			nr -= aux ; 
			
		}
		
		if( nr == 0 )
			ok = 1 ;
		
		if ( ok == 1){
			//se pot forma
			p = m + 1 ;
		}
		else
			u = m - 1 ;
		
	}
	
	fprintf ( g, "%lld", u );
	
	fclose(f);
	fclose(g);
	return 0;
}