Cod sursa(job #2022546)

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

using namespace std;

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

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

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

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

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

inline int checkGroup(int _start, int _finish, int cnt)
{
    if (!cnt)
        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 << First << "\n";
                break;
            }
        }
    }
    return 0;
}