Pagini recente » Cod sursa (job #3169263) | Cod sursa (job #2041274) | Cod sursa (job #3033333) | Cod sursa (job #1922077) | Cod sursa (job #2022560)
#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;
}