Pagini recente » Cod sursa (job #1069874) | Cod sursa (job #1109225) | Cod sursa (job #981953) | Cod sursa (job #2990115) | Cod sursa (job #1245410)
#include <bits/stdc++.h>
using namespace std;
long long solve(long long N, long long R) {
for (long long k = 1;; ++k) {
long long start = k * k - k + 1;
long long margin = k - 1;
bool isGood = true;
for (long long i = 1; i < N; ++i) {
long long here = start + R * i;
long long floorSqrt = sqrt(here);
long long ceilSqrt = floorSqrt + 1;
if (floorSqrt * floorSqrt == here) {
ceilSqrt = floorSqrt;
}
long long upperBound = ceilSqrt * ceilSqrt;
long long lowerBound = upperBound - ceilSqrt + 1;
// if it fits
if (lowerBound <= here && here <= upperBound) {
margin = min(margin, upperBound - here);
} else {
if (margin == 0) {
isGood = false;
break;
}
long long nextUpperBound = (ceilSqrt + 1) * (ceilSqrt + 1);
long long nextLowerBound = nextUpperBound - (ceilSqrt + 1);
// here + X = nextLowerBound, X = nextLowerBound - here
long long X = nextLowerBound - here;
if (X > margin) {
isGood = false;
break;
}
start += X;
margin -= X;
}
}
if (isGood) {
return start;
}
}
}
int main() {
ifstream in("progresie.in");
ofstream out("progresie.out");
int T = 0;
in >> T;
for (int i = 0; i < T; ++i) {
int N, R;
in >> N >> R;
out << solve(N, R) << "\n";
}
in.close();
out.close();
return 0;
}