Cod sursa(job #2733589)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 30 martie 2021 17:12:03
Problema Progresie Scor 0
Compilator cpp-64 Status done
Runda Arhiva ICPC Marime 1.44 kb
#include <bits/stdc++.h>

using namespace std;

int t,n,r;

int verif (long long val){
    long long nr = sqrt(val);
    if (sqrt(val) == nr)
        return 1;

    nr++;
    if (nr*(nr-1)+1 <= val && val <= nr*nr)
        return 1;
    return 0;
}
int main (){

    ifstream cin ("progresie.in");
    ofstream cout ("progresie.out");

    cin>>t;
    for (;t--;){
        cin>>n>>r;
        for (long long i=1;;i++){

            long long start = i * (i-1) + 1;
            long long nr = i-1;
            int ok = 1;

            for (int j=1;j<n;j++){
                long long poz = start + r * j;

                long long block = sqrt(poz-1) + 1; /// in blocul asta ar trebui sa se afle
                long long start_block = block * (block - 1) + 1;
                long long end_block = block * block;

                if (poz < start_block){ /// trb sa deplasez la dreapta
                    start += start_block - poz;
                    nr -= start_block - poz;
                } else {
                    nr = min (nr,end_block - poz);
                }

                if (poz + nr < start_block){
                    /// inseamna ca nici acum nu am reusit sa il aduc in bloc
                    ok = 0;
                    break;
                }

            }

            if (ok){
                cout<<start<<"\n";
                break;
            }
        }
    }

    return 0;
}