Cod sursa(job #2560259)

Utilizator bem.andreiIceman bem.andrei Data 27 februarie 2020 20:56:11
Problema Transport Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream r("abx.in");
ofstream w("abx.out");
long long m;
long long put(long long a, long long b){
    long long p=1;
    while(b!=0){
        if(b%2==1){
            p*=a;
        }
        b/=2;
        a*=a;
    }
        if(p>m || p<0){
            return 0;
        }
        return p;
}
int cautbin(int putere, long long numar){
    int st=0, dr=numar, mij, rez=1;
    while(st<=dr){
        mij=(dr+st)/2;
        if(put(mij,putere)>=numar || put(mij,putere)==0){
            dr=mij-1;
            rez=mij;
        }
        else{
            st=mij+1;
        }
    }
    return rez;
}
int main()
{
    int n;
    r>>n>>m;
    for(int k=0;k<n;k++){
        long long x, nr, minim=m;
        r>>x;
        for(int i=2;i<=60;i++){
            long long exponent, dif, nrp;
            exponent=cautbin(i,x);
            if(put(exponent,i)-x<x-put(exponent-1,i) && put(exponent,i)<=m){
                dif=put(exponent,i)-x;
                nrp=put(exponent,i);
            }
            else{
                dif=x-put(exponent-1,i);
                nrp=put(exponent-1,i);
            }
            if(dif<minim && nrp<=m && nrp>0){
                minim=dif;
                nr=nrp;
            }
        }
        w<<nr<<"\n";
    }
    return 0;
}