Cod sursa(job #291484)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 29 martie 2009 21:55:12
Problema Grupuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
# include <cstdio>

# define FIN "grupuri.in"
# define FOUT "grupuri.out"
# define min(a, b) (a < b ? a : b)
# define MAXN 100005

long long N, K, i, s = 0;
long long A[MAXN];

     int ok(long long val)
     {
         long long ct = 0;
         
         for (i = 1; i <= N; ++i)
           ct += min(val, A[i]);
           
         if (ct / val >= K) return 1;
         
         return 0;
     }

     long long search(long long st, long long dr)
     {
         long long mij, sol = 0;
         
         while (st <= dr)
         {
             mij = (st + dr) >> 1;
             
             if (ok(mij))
             {
                 sol = mij;
                 st = mij + 1;
             } else dr = mij - 1;
         }
         
         return sol;
     }

     int main()
     {
         freopen(FIN, "r", stdin);
         freopen(FOUT, "w", stdout);
         
         scanf("%lld %lld", &K, &N);
         
         for (i = 1; i <= N; ++i)
            scanf("%lld", &A[i]), s += A[i];
            
         printf("%lld", search(1, s / K));
         
         return 0;
     }