Cod sursa(job #2022560)

Utilizator sfechisalin@yahoo.comSfechis Alin [email protected] Data 16 septembrie 2017 18:52:44
Problema Progresie Scor 0
Compilator cpp Status done
Runda Arhiva ICPC Marime 1.38 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("progresie.in");
ofstream fout("progresie.out");

long long T, N, group;
long long R, First, Last, answ;
pair<long long, long long>Group1, Group2;

pair<long, long> getFirstLast(long long group){
    return make_pair(1LL * group * (group - 1) + 1,1LL * group * group );
}

inline int getGroup(long long elem){
    return sqrt(elem - 1.0) + 1;
}

inline bool seInter(pair<long long, long long> p1, pair<long long, long long> p2){
    if (p1.second < p2.first || p1.first > p2.second)
        return false;
    return true;
}

inline bool checkGroup(long long _start, long long _finish, long long cnt)
{
    if (!cnt)
       {
         answ = _start;
         return true;
       }

    Group1 = make_pair(_start + R, _finish + R);
    Group2 = getFirstLast(getGroup(_start + R));
    if (seInter(Group1, Group2))
        return checkGroup(max(Group1.first, Group2.first),min(Group1.second, Group2.second), cnt - 1);
    return false;
}

int main()
{
    fin >> T;
    for (; T; --T)
    {
        fin >> N >> R;
        for (group = 1; ; ++group)
        {
            tie(First, Last) = getFirstLast(group);
            if (checkGroup(First, Last, N - 1))
            {
                fout << answ - 1LL * (N - 1)* R << "\n";
                break;
            }
        }
    }
    return 0;
}