Cod sursa(job #863675)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 23 ianuarie 2013 22:56:20
Problema Grupuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#define nmax 100100
using namespace std;

int N,K,A[nmax];
long long Sol;

bool Check(long long Val) {

    int i;
    long long Sum;

    for(i=1,Sum=0;i<=N;i++)
        Sum+=(A[i]<Val?A[i]:Val);

    return (Sum>=Val*K);

}
long long BinarySearch(long long Max) {

    long long i,step;

    for(step=1;step<Max;step<<=1);

    for(i=0;step;step>>=1)
        if(i+step<=Max && Check(i+step))
            i+=step;

    return i;

}
void solve() {

    int i;
    long long Sum;

    for(i=1,Sum=0;i<=N;i++)
        Sum+=A[i];

    Sol=BinarySearch(Sum/K);


}
void read() {

    ifstream in("grupuri.in");

    in>>K>>N;
    for(int i=1;i<=N;i++)
        in>>A[i];

    in.close();

}
void write() {

    ofstream out("grupuri.out");
    out<<Sol<<'\n';
    out.close();

}
int main() {

    read();
    solve();
    write();

    return 0;

}