Pagini recente » Cod sursa (job #2848934) | Cod sursa (job #586470) | Cod sursa (job #2759988) | Cod sursa (job #1773416) | Cod sursa (job #2022557)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("progresie.in");
ofstream fout("progresie.out");
int T, N, group;
long long R, First, Last, answ;
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 bool checkGroup(int _start, int _finish, int 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;
}