Cod sursa(job #1119401)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 24 februarie 2014 17:29:47
Problema Grupuri Scor 44
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<fstream>
#include<algorithm>
#define NMAX 100010

using namespace std;

long long a[NMAX], aux[NMAX], sum;
int n, k;

ifstream f("grupuri.in");
ofstream g("grupuri.out");

bool cmp(int A, int B)
{
    return B<A;
}

void Citeste()
{
    int i;
    f>>k>>n;
    for (i=1; i<=n; ++i)
    {
        f>>a[n-i+1];
        sum+=a[n-i+1];
    }
}

bool valid(int x)
{
    int i, j=1;
    long long nr, r=0;

    for (i=1; i<=n; ++i) aux[i]=a[i];

    for (i=1; i<=k; ++i)
    {
        nr=x;

        if (aux[j]<x)
        {
            aux[j]+=r;
            while (nr>aux[j] && j<=n)
            {
                nr-=aux[j++];
            }
            aux[j]-=nr;
            r=aux[j];
        }
        else
            if (j<=n) ++j;
        if (j==n+1 && (i!=k || (i==k && nr!=0))) return 0;
    }
    return 1;
}

void Solve()
{
    long long st=1, dr=sum/k, mij, sol=0;

    while (st<=dr)
    {
        mij=(st+dr)/2;
        if (valid(mij))
        {
            sol=mij;
            st=mij+1;
        }
        else dr=mij-1;
    }
    g<<sol<<"\n";
}

int main()
{
    Citeste();
    Solve();
    f.close();
    g.close();
    return 0;
}