Cod sursa(job #1245446)

Utilizator OwlreeRobert Badea Owlree Data 19 octombrie 2014 11:42:09
Problema Progresie Scor 100
Compilator cpp Status done
Runda Arhiva ICPC Marime 1.27 kb
#include <bits/stdc++.h>

using namespace std;

long long solve(int N, int R) {

    for (int k = 1;; ++k) {
        long long start = 1LL * k * k - k + 1;
        long long margin = k - 1;
        bool isGood = true;

        for (int i = 1; i < N; ++i) {
            long long hereLow = start + 1LL * R * i;
            long long hereHigh = hereLow + margin;

            int j = (int)sqrt(hereLow - 1);
            long long goodLow = 1LL * j * (j + 1) + 1;
            long long goodHigh = 1LL * (j + 1) * (j + 1);

            if (hereHigh < goodLow) {
                isGood = false;
                break;
            }

            if (hereLow < goodLow) {
                start += (goodLow - hereLow);
                margin -= (goodLow - hereLow);
            } else if (hereHigh > goodHigh) {
                margin -= (hereHigh - goodHigh);
            }
        }
        if (isGood) {
            return start;
        }
    }

}

int main() {

    FILE* readFile = fopen("progresie.in", "r");
    FILE* writeFile = fopen("progresie.out", "w");

    int T = 0;
    fscanf(readFile, "%d", &T);
    int N, R;
    for (int i = 0; i < T; ++i) {
        fscanf(readFile, "%d", &N);
        fscanf(readFile, "%d", &R);
        fprintf(writeFile, "%lld\n", solve(N, R));
    }

    return 0;
}