Pagini recente » Cod sursa (job #363141) | Diferente pentru implica-te/arhiva-educationala intre reviziile 179 si 180 | Cod sursa (job #3288592) | Cod sursa (job #3292621) | Cod sursa (job #2240002)
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("progresie.in");
ofstream fout("progresie.out");
int64_t tc, n, r, group, crtPos, crtGrp, m, i;
bool ok;
int64_t crtGroup(int64_t x) {
return (int64_t)sqrt(x - 1.0) + 1;
}
pair<int64_t, int64_t> grpLims(int64_t grp) {
return make_pair(grp * grp - grp + 1, grp * grp);
}
int main()
{
fin >> tc;
while(tc--) {
fin >> n >> r;
group = 0;
while(1) {
group ++;
crtPos = grpLims(group).first;
crtGrp = group;
m = group - 1;
ok = 1;
for (i = 2 ; i <= n ; i++) {
crtPos += r;
if (crtPos > grpLims(crtGrp).second) {
crtGrp++;
if (grpLims(crtGrp).first - crtPos <= m) {
m -= crtPos - grpLims(crtGrp).first;
crtPos = grpLims(crtGrp).first;
} else {
ok = 0;
break;
}
}
m = min(m, grpLims(crtGrp).second - crtPos);
}
if (ok) {
fout << crtPos - (n - 1) * r << '\n';
break;
}
}
}
}