Cod sursa(job #461993)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 9 iunie 2010 15:10:35
Problema Grupuri Scor 2
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 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;
long long sum[100005],max;
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]);
		sum[i] = sum[i-1] + 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 = n ;
		
		while ( a[i] >= k )
			nr -= k, --i;
		
		if( nr <= sum[i] ){
			ok = 1 ;
			if( m > max )
				max = m ;
		}
		
		if ( ok == 1){
			//se pot forma
			p = m + 1 ;
		}
		else
			u = m - 1 ;
		
	}
	
	fprintf ( g, "%lld\n", max );
	
	fclose(f);
	fclose(g);
	return 0;
}