Cod sursa(job #1185644)

Utilizator tudormaximTudor Maxim tudormaxim Data 16 mai 2014 10:35:04
Problema Progresie Scor 0
Compilator cpp Status done
Runda Arhiva ICPC Marime 1.16 kb
#include <cstdio>
#include <cmath>
#define ll long long
using namespace std;
FILE *f=fopen("progresie.in","r");
FILE *g=fopen("progresie.out","w");
int T, N, R,i,it;

long long solve(int N, int R)
{
    for (i = 0; ; ++ i)
    {
        ll start = 1LL * i * (i + 1) + 1;
        ll margin = i;
        int OK = 1;
        for (it = 1; it < N; ++ it)
        {
            ll low = start + 1LL * it * R;
            ll high = low + margin;
            int j = (int)sqrt(low - 1);
            ll lowi = 1LL * j * (j + 1) + 1;
            ll highi = 1LL * (j + 1) * (j + 1);

            if (high < lowi)
            {
                OK = 0;
                break ;
            }
            if (low < lowi)
            {
                start += lowi - low;
                margin -= lowi - low;
            }
            else if (high > highi)
                margin -= high - highi;
        }
    if (OK)
      return start;
    }
}

int main()
{
    fscanf(f,"%d",&T);
    for (int t = 1; t <= T; ++ t)
    {
        fscanf(f,"%d%d",&N,&R);
        fprintf(g,"%ld\n",solve(N, R) );
    }
    fclose(f);
    fclose(g);
    return 0;
}