Cod sursa(job #2500035)

Utilizator traiandobrinDobrin Traian traiandobrin Data 27 noiembrie 2019 10:16:15
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#define int long long
using namespace std;
//ifstream cin("uscat.in");
//ofstream cout("uscat.out");
int n,a[100005],x;
//sumt=nr*n-nr+x*nr
bool verif(int m)
{
    long long t=0;
    for(int i=1;i<=n;++i){
        if(a[i]>m)
            t+=(a[i]-m)/(x-1)+((a[i]-m)%(x-1));
    }
    if(t>m)
        return 1;
    else 
        return 0;
}
main()
{
    int i,pans=-1;
    cin>>n;
    for(i=1;i<=n;++i)
        cin>>a[i],pans=max(pans,a[i]);
        cin>>x;
        if(x==1)
        {
            cout<<pans;
            return 0;
        }
        int msk=1<<20,pos=0;
        for(;msk;msk/=2)
        {
            if(verif(pos+msk)==1)
                pos+=msk;
        }
        cout<<pos+1;
       /* int z=0;
        while(1)
        {   bool da=0;
        ++z;
        int pozm,maxx=-1;
        for(i=1;i<=n;++i)
        {
            if(maxx<a[i])
                maxx=a[i],pozm=i;
        }
            for(i=1;i<=n;++i)
            {
             a[i]--;
             if(a[i]>0&&i!=pozm) da=1;   
            }
            a[pozm]-=(x-1);
            if(a[pozm]>0)
                da=1;
                if(da==0)
                break;
        }
        cout<<z;*/
    return 0;
}