Cod sursa(job #1061975)

Utilizator SpiderManSimoiu Robert SpiderMan Data 20 decembrie 2013 15:50:34
Problema Progresie Scor 0
Compilator cpp Status done
Runda Arhiva ICPC Marime 0.99 kb
# include <cstdio>
# include <cmath>
# include <cassert>

typedef long long ll;
const char *FIN = "progresie.in", *FOU = "progresie.out";

int N, R, T;

inline ll pw (int n) {
    return 1LL * n * (n - 1) + 1;
}

inline ll cauta(int x) {
    ll delta = 1 + 8LL*x;
    double rad = sqrt(delta);
    double n1 = (-1 - rad) * 0.5, n2 = (-1 + rad) * 0.5;
    return static_cast <ll> (n2);
}

inline bool is(ll val) {
    int n = cauta((val - 1) >> 1) + 1;
    ll first_elem = pw(n);
    return val < n + first_elem;
}

inline bool check (int sol) {
    ll elem = pw(sol);
    for (int i = 2; i <= N; ++i)
        if (is(elem += R) == 0)
            return 0;
    return 1;
}

inline ll solve() {
    int sol;
    for (sol = 1; check(sol) == 0; ++sol);
    return pw(sol);
}

int main (void) {
    freopen (FIN, "r", stdin);
    freopen (FOU, "w", stdout);

    for (scanf ("%d", &T); T; --T) {
        scanf ("%d %d", &N, &R);
        printf ("%lld\n", solve());
    }
}