Cod sursa(job #2913113)

Utilizator betybety bety bety Data 12 iulie 2022 19:39:33
Problema Progresie Scor 100
Compilator cpp-64 Status done
Runda Arhiva ICPC Marime 1.55 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("progresie.in");
ofstream out("progresie.out");
typedef long long ll;
bool check(ll x)
{
    ll n=sqrt(x);
    while(n*(n+1)<x)
        ++n;
    --n;
    x-=n*(n+1);
    if(x<=n+1)
        return true;
    return false;
}
ll nextterm(ll x)
{
    ll n=sqrt(x);
    while(n*(n+1)<x)
        ++n;
    --n;
    if(x-n*(n+1)<=n+1)
        return x;
    return (n+1)*(n+2)+1;
}
ll lastterm(ll x)
{
    ll n=sqrt(x);
    while(n*(n+1)<x)
        ++n;
    --n;
    if(x-n*(n+1)<=n+1)
        return x;
    return (n+1)*(n+1);
}
ll tst,n,r;
int main()
{
    ios_base::sync_with_stdio(false);
    in.tie(0),out.tie(0);
    in>>tst;
    while(tst--)
    {
        in>>n>>r;
        for(ll grupa=1;;++grupa)
        {
            ll st=(grupa-1)*grupa+1;
            ll dr=grupa*grupa;
            bool ok=true;
            for(ll i=1;i<n;++i)
            {
                st+=r;
                dr+=r;
                st=nextterm(st);
                dr=lastterm(dr);
                if(st>dr)
                {
                    ok=false;
                    break;
                }
            }
            if(!ok)
                continue;
            out<<st-(n-1)*r<<'\n';
            break;
        }
    }
    return 0;
}
/// pt (30,1.000.000) e 1.464.248.491
/// pt (30,100.000.000) e 670.380.219.057
/*
11
30 1000000
30 100000000
30 1000000
30 100000000
30 1000000
30 100000000
30 1000000
30 100000000
30 1000000
30 100000000
30 12345678
*/