Pagini recente » Cod sursa (job #1439499) | Cod sursa (job #2446503) | Cod sursa (job #1560298) | Cod sursa (job #1013672) | Cod sursa (job #2734229)
#include <stdio.h>
#include <ctype.h>
#define MAXN 100000
#define BIGGEST_POSSIBLE 100000000000LL// 10^11 (worst case)
int v[MAXN];
FILE *fin, *fout;
static inline int fgetint(){
int n = 0, ch;
while( !isdigit(ch = fgetc(fin)) );
do
n = n * 10 + ch - '0';
while( isdigit(ch = fgetc(fin)) );
return n;
}
int isGood( int n, int k, long long ngrup ){
int i = 0;
long long sum = 0;
while( i < n && v[i] < ngrup ){
sum += v[i++];
}
sum += (n - i) * ngrup;// ngrup e deja long long deci nu mai trebuie sa convertim
return (sum >= ngrup * k);
}
int main(){
fin = fopen("grupuri.in", "r");
fout = fopen("grupuri.out", "w");
int n, k, i;
long long st, dr, mij;
k = fgetint();
n = fgetint();
for( i = 0 ; i < n ; i++ )
v[i] = fgetint();
st = 0;
dr = BIGGEST_POSSIBLE + 1;
while( dr - st > 1 ){
if( isGood(n, k, mij = (dr + st) / 2) )
st = mij;
else
dr = mij;
}
fprintf(fout, "%lld\n", st);
fclose(fin);
fclose(fout);
return 0;
}