Cod sursa(job #2423335)

Utilizator alexdumitrescuDumitrescu George Alex alexdumitrescu Data 21 mai 2019 08:55:12
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.52 kb
#include <fstream>
#include <algorithm>

using namespace std;
ifstream fin ("telefon.in");
ofstream fout ("telefon.out");
int n, v[100005], s[100005], b, i, A, B, d, r, k, poz, in, val1, minn1, minn2, val2, nef;
int schema2003(int r)
{
    int st=1, dr=n-1, mij, ra=0;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(v[mij]<=r)
        {
            ra=mij;
            st=mij+1;
        }
        else dr=mij-1;
    }
    return ra;
}
int main()
{
    fin >> n >> b;
    fin >> A;
    for(i=1;i<n;i++)
    {
        fin >> B;
        v[i]=B-A;
        A=B;
    }
    minn1=minn2=A;
    sort(v+1, v+n);

    for(i=1;i<=n;i++)
        s[i]=s[i-1]+v[i];

    for(d=1;d*d<=b;d++)
        if(b%d==0)
        {
            k=d;
            r=b/d;
            poz=schema2003(r);
            in=max(poz-k, 0);
            val1=s[n]-s[poz]+s[in];
            nef=k-poz+in;
            val2=val1;
            if(poz==n-1&&nef==0)
                val2=val1+1;
            else if(poz!=n-1)
            {
                if(nef==1)
                    val2=val1-r;
                if(nef>=2)
                {
                    if(2*r<v[poz+1])
                        val2=val1-r;
                    else
                        val2=val1-2*r;
                }
                else if(nef==0)
                    val2=val1+v[in+1]-r;
            }
            minn1=min(minn1, val1);
            minn2=min(minn2, val2);
        }
    fout << minn1 << ' ' << minn2;
    return 0;
}