Cod sursa(job #1375926)

Utilizator firutibogdanFiruti Bogdan-Cristian firutibogdan Data 5 martie 2015 15:04:45
Problema Progresie Scor 0
Compilator cpp Status done
Runda Arhiva ICPC Marime 1.58 kb
#include<fstream>
#include<cmath>
using namespace std;
long long valoare(long long poz)
{
    long long offset,kmax,first;
    double k2;
    k2=(-1+sqrt(1+8*poz))/2;
    if(k2==(long long)k2)
    {
        kmax=k2-1;
    }
    else
    {
        kmax=(long long)k2;
    }
    first=kmax*(kmax+1);
    offset=poz-first/2;
    return first+offset;
}
long long pozitie(long long valoare)
{
    double k2;
    long long kmax;
    k2=(-1+sqrt(1+4*valoare))/2;
    if(k2==(long long)k2)
    {
        kmax=k2-1;
    }
    else
    {
        kmax=(long long)k2;
    }
    return valoare-kmax*(kmax+1)/2;
}
int main()
{
    long long t,n,R,i,v,v2,v3,j,poz,ok;
     ifstream fin("progresie.in");
    ofstream fout("progresie.out");
    fin>>t;
    while(t>0)
    {
        fin>>n>>R;
        ok=0;
        i=1;
        while(ok==0)
        {
            v=valoare(i);
            if(v-R>0)
            {
                poz=pozitie(v-R);
                v2=valoare(poz);
                if(v2==v-R)
                {
                    i++;
                    continue;
                }
            }
            v3=v;
            for(j=1;j<=n-1;j++)
            {
                v=v+R;
                poz=pozitie(v);
                v2=valoare(poz);
                if(v2!=v)
                {
                    break;
                }
            }
            if(j==n)
            {
                ok=1;
                break;
            }
            i++;
        }
        fout<<v3<<'\n';
        t--;
    }
    return 0;
}