Cod sursa(job #1562603)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 5 ianuarie 2016 12:37:41
Problema Progresie Scor 0
Compilator cpp Status done
Runda Arhiva ICPC Marime 1.03 kb
#include <cstdio>
#include <cmath>
inline long long solve(int gr, int n, int r){
    int l, i;
    long long st, x, a;
    x=st=(gr-1)*(long long)gr+1;
    l=gr-1;
    for(i=2; i<=n; i++){
        x+=r;
        gr=sqrt(x);
        if(((gr-1)*(long long)gr>=x)||(x>gr*(long long)(gr+1))){
            gr++;
        }
        a=(gr-1)*(long long)gr+1;
        if(x-a>gr-1){
            a=(gr+1)*(long long)gr+1;
            l-=a-x;
            st+=a-x;
            x+=a-x;
        }else if(l>a+gr-1-x){
            l=a+gr-1-x;
        }
        if(l<0){
            return 0;
        }
    }
    return st;
}
int main(){
    int t, n, r, gr;
    long long x;
    FILE *fin, *fout;
    fin=fopen("progresie.in", "r");
    fout=fopen("progresie.out", "w");
    fscanf(fin, "%d", &t);
    for(; t; t--){
        fscanf(fin, "%d%d", &n, &r);
        gr=1;
        while((x=solve(gr, n, r))==0){
            gr++;
        }
        fprintf(fout, "%lld\n", x);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}