Cod sursa(job #2734229)

Utilizator mircea_007Mircea Rebengiuc mircea_007 Data 31 martie 2021 15:54:43
Problema Grupuri Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1 kb
#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;
}