Cod sursa(job #1992033)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 19 iunie 2017 10:24:45
Problema Fibo3 Scor 30
Compilator cpp Status done
Runda Simulare 15b Marime 1.21 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream fin ("fibo3.in"); ofstream fout ("fibo3.out");

typedef long long i64;

const i64 lim = 1e15 + 5;
const i64 inf = 1LL << 60;
vector< i64 > f;

int main() {
    f.push_back( 1 );

    i64 a = 1, b = 1;
    while (a + b <= lim) {
        f.push_back(a + b);
        i64 c = a + b;
        a = b; b = c;
    }

    int n;
    fin >> n;
    for (int i = 1; i <= n; ++ i) {
        i64 c, d;
        fin >> a >> b >> c >> d;

        i64 ans = 0;
        for (auto j : f) {
            if (c + d < j) break;

            if (a + b <= j) {
                i64 x, y;

                x = inf;
                if (a <= j - b && j - b <= c) {
                    x = min(x, b);
                }
                if (b <= j - c && j - c <= d) {
                    x = min(x, j - c);
                }

                y = -inf;
                if (a <= j - d && j - d <= c) {
                    y = max(y, d);
                }
                if (b <= j - a && j - a <= d) {
                    y = max(y, j - a);
                }

                ans += y - x + 1;
            }
        }

        fout << ans << "\n";
    }

    fin.close();
    fout.close();
    return 0;
}