Cod sursa(job #2017509)

Utilizator GoogalAbabei Daniel Googal Data 1 septembrie 2017 15:14:59
Problema Progresie Scor 100
Compilator cpp Status done
Runda Arhiva ICPC Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

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

int t, n, r;

long long result() {
  for(int i = 0; 1; i++) {
    long long start = 1LL * (i) * (i + 1) + 1;
    long long margin = i;
    bool ok = 1;

    for(int j = 1; j < n; j++) {
      long long low = start + 1LL * j * r;
      long long high = low + margin;
      int k = sqrt(low - 1);
      long long low2 = 1LL * k * (k + 1) + 1;
      long long high2 = 1LL * (k + 1) * (k + 1);

      if(high < low2) {
        ok = 0;
        break;
      } else if(low < low2) {
        start += low2 - low;
        margin -= low2 - low;
      } else if(high2 < high) {
        margin -= high - high2;
      }
    }
    if(ok)
      return start;
  }
}

int main()
{
  in >> t;
  for(int i = 1; i <= t; i++) {
    in >> n >> r;
    out << result() << '\n';
  }
  return 0;
}