Cod sursa(job #1076201)

Utilizator bghimisFMI Ghimis Bogdan bghimis Data 9 ianuarie 2014 22:48:14
Problema Grupuri Scor 74
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <cstdio>
#include <algorithm>
#include <functional>
using namespace std;

int n, k;
int v[100001];

long long cautare_binara (int stanga, int dreapta, long long solutie = -1)
{
  if (stanga <= dreapta)
    {
      int mijloc = stanga + ((dreapta - stanga) >> 1);
      
      long long suma = accumulate (v + 1, v + n + 1, 0, [&mijloc](int acc, int val){
	  if (val > mijloc)
	    return acc + mijloc;
	  else
	    return acc + val;
	});

      if (suma >= mijloc * k)
	return cautare_binara (mijloc + 1, dreapta, mijloc);
      else 
	return cautare_binara (stanga, mijloc - 1, solutie);
  }

  return solutie;
}
 
int main ()
{
  FILE *in, *out;

  in  = fopen ("grupuri.in",  "r");
  out = fopen ("grupuri.out", "w");
  
  fscanf (in, "%d %d", &k, &n);

  int suma = 0;
  for (int i = 1; i <= n; ++i)
    {
      fscanf (in, "%d", &v[i]);
      suma += v[i];
    }
  
  long long solutie = cautare_binara (1, suma / k);
  
  fprintf (out, "%lld", solutie);
  
  fclose (in);
  fclose (out);

  return 0;
}