Cod sursa(job #460799)

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

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;
		
		if ( ok == 1){
			//se pot forma
			p = m + 1 ;
		}
		else
			u = m - 1 ;
		
	}
	
	fprintf ( g, "%d", u );
	
	fclose(f);
	fclose(g);
	return 0;
}