Cod sursa(job #1824954)

Utilizator felixiPuscasu Felix felixi Data 8 decembrie 2016 16:49:11
Problema Progresie Scor 100
Compilator cpp Status done
Runda Arhiva ICPC Marime 1.23 kb
#include<fstream>
#include<cmath>

#define pii pair<long long,long long>
#define x first
#define y second
#define mp make_pair

using namespace std;

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

int nr,i,t,n;

long long r;

pii sol,sol1,sol2;

inline long long primul(int x){
    return 1LL * x * (x - 1) + 1;
}

inline long long ultimul(int x){
    return 1LL * x * x;
}

inline bool se_inter(pii a,pii b)
{
    if(a.y < b.x || a.x > b.y)
        return 0;

    return 1;
}
inline bool verif(int n)
{
    if(!n)
    {
        return 1;
    }

    pii sol1 = mp(sol.x + r , sol.y + r);

    int care = (int)sqrt(sol1.x - 1) + 1;

    pii sol2 = mp (primul(care) , ultimul(care));

    if(se_inter(sol1 , sol2))
    {
        sol = mp(max(sol1.x , sol2.x) , min(sol1.y , sol2.y));

        return verif(n - 1);
    }

    return 0;
}


int main()
{
    f >> t;
    for(; t ; -- t)
    {
        f >> n >> r;

        -- n;

        for(i = 1 ; ; ++ i)
        {
            sol = mp(primul(i) , ultimul(i));

            if(verif(n))
            {
                g << sol.x - 1LL * n * r << '\n';

                break;
            }
        }
    }
    return 0;
}