Cod sursa(job #2540696)

Utilizator YouDontNeedMyNameJurcut Paul YouDontNeedMyName Data 7 februarie 2020 15:25:17
Problema Progresie Scor 0
Compilator cpp-64 Status done
Runda Arhiva ICPC Marime 1.14 kb
#include <bits/stdc++.h>
#define nmax 1024
#define ll long long
using namespace std;
ifstream in("progresie.in");
ofstream out("progresie.out");
ll n,t,r;
struct line{
    ll x;
    ll poz;
};
line ini;
ll value(line a){
    return a.x*(a.x-1)+a.poz;
}
line nextLine(ll val){
    ll x = sqrt(val);
    if(x*(x+1)<val){
        return {x+1,val-x*(x+1)};
    }
    if(x*(x-1)<val){
        return {x,val-x*(x-1)};
    }
    if((x-1)*(x-2)<val){
        return {x-1,val-(x-1)*(x-2)};
    }
}
bool getNextLine(int val){
    line aux = ini;
    for(ll i=1; i<n; i++){
        aux = nextLine(value(aux)+val);
        if(aux.poz>aux.x){
            line newLine = nextLine((value({aux.x+1,1}))-value(aux)+value(ini));
            if(newLine.poz>newLine.x){
                ini = {newLine.x+1,1};
            }
            else{
                ini = newLine;
            }
            return false;
        }
    }
    return true;
}
void solve()
{
    in >> n >> r;
    ini = {1,1};
    for(;!getNextLine(r););
    out << value(ini) << '\n';

}
int main(){
    in >> t;
    while(t--){
        solve();
    }
}