Pagini recente » Cod sursa (job #2146021) | Cod sursa (job #2059496) | Cod sursa (job #1891382) | Cod sursa (job #2032788) | Cod sursa (job #1092468)
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cmath>
#define ll long long
#define pb push_back
#define mp make_pair
#define pii pair <int, int>
#define pll pair <ll, ll>
#define x first
#define y second
using namespace std;
vector <pll> sol, curr;
int tests, n, r;
inline int inters(ll l1, ll r1, ll l2, ll r2)
{
return !(l1 > r2 || l2 > r2);
}
inline int check(int left)
{
if (left == 0)
return sol.size();
curr.clear();
for (int i = 0; i < sol.size(); i++)
{
pll intv = mp(sol[i].x + r, sol[i].y + r);
int left = (int)sqrt(intv.x), right = (int)sqrt(intv.y);
for (int j = left; j <= right; j++)
{
if (inters(intv.x, intv.y, (ll)(j - 1) * j + 1, (ll)j * j))
{
pll inters;
inters.x = max(intv.x, (ll)(j - 1) * j + 1);
inters.y = min(intv.y, (ll)j * j);
curr.pb(inters);
}
}
}
sol = curr;
return check(left - 1);
}
int main()
{
freopen("progresie.in", "r", stdin);
freopen("progresie.out", "w", stdout);
scanf("%d", &tests);
while (tests--)
{
scanf("%d%d", &n, &r);
for (int i = 1; ; i++)
{
sol.clear();
sol.pb(mp((ll)(i - 1) * i + 1, (ll)i * i));
if (check(n - 1))
{
printf("%lld\n", sol[0].x - (ll)(n - 1) * r);
break ;
}
}
}
return 0;
}