Pagini recente » Cod sursa (job #1180582) | Cod sursa (job #1194779) | Cod sursa (job #492330) | Cod sursa (job #1123775) | Cod sursa (job #2022544)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("progresie.in");
ofstream fout("progresie.out");
int T, N, First, Last, group;
long long R;
pair<int, int>Group1, Group2;
pair<long, long> getFirstLast(int group){
return make_pair(group * (group - 1) + 1, 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;
}