Cod sursa(job #1182950)

Utilizator cbteamROAD to ACM cbteam Data 8 mai 2014 02:50:49
Problema Progresie Scor 0
Compilator cpp Status done
Runda Arhiva ICPC Marime 1.35 kb
#include<cstdio>
#include<cmath>
#define eps 0.000001
using namespace std;
int apartine(long long nr)//daca numarul apartine progresiei
{
    int rad;
    float rad_f;
    rad = sqrt(nr);
    rad_f = sqrtf(nr);
    if((rad_f-rad)>eps)rad++;
    if(rad*(rad-1)+1 <= nr)return 1;
    return 0;
}
long long calculeaza(int V, int N, int R)
{
    int i;
    long long E,VV;
    VV=V-R;
    if(VV<1)VV=1;
    for(VV;VV<V;VV++)
    {
        E=VV;
        for(i=1; i<=N; i++)
        {
            if(!apartine(E))break;
            E += R;
        }
        if(i==N+1)return VV;
    }
    return V;
}
long long start(int N, int R)
{
    long long V, E, k=1;
    long long rad;
    int i;
    for(;;)//sau E+=valoare
    {
        V=k*(k-1)+1;
        E=V;
        for(i=1; i<=N; i++)
        {
            if(!apartine(E))break;
            E += R;
        }
        if(i==N+1)return calculeaza(V,N,R);
        k++;
    }
}
int main()
{
    /* progresie care contine k elemente, nu contine k elemente, contine k+1 elemente,
       nu contine k+1 elemente
    */
    int T, N, R, k=0, nr=1, i, j;
    long long V;
    freopen("progresie.in","r",stdin);
    freopen("progresie.out","w",stdout);
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d %d",&N,&R);
        printf("%lld\n", start(N,R));
    }
    return 0;
}