Cod sursa(job #1760698)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 21 septembrie 2016 09:17:52
Problema Fibo3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>

#define MAXN 100

long long fib[MAXN+1];
int n;

inline long long min2(long long a, long long b){
    if(a<b) return a;
    else return b;
}

inline long long max2(long long a, long long b){
    if(a>b) return a;
    else return b;
}

inline void precalc(){
    n=1;
    fib[0]=fib[1]=1;
    while(fib[n]<=1000000000000000000LL){
        n++;
        fib[n]=fib[n-1]+fib[n-2];
    }
    printf("%d\n", n);
}

inline long long solve(long long a, long long b, long long x, long long y){
    long long ans=0;
    for(int i=1; i<n; i++)
        if((a+b<=fib[i])&&(fib[i]<=x+y))
            ans+=1+min2(x, fib[i]-b)-max2(a, fib[i]-y);
    return ans;
}

int main(){
    int t;
    long long a, b, x, y;
    FILE *fin, *fout;
    fin=fopen("fibo3.in", "r");
    fout=fopen("fibo3.out", "w");
    precalc();
    fscanf(fin, "%d", &t);
    for(; t; t--){
        fscanf(fin, "%lld%lld%lld%lld", &a, &b, &x, &y);
        fprintf(fout, "%lld\n", solve(a, b, x, y));
    }
    fclose(fin);
    fclose(fout);
    return 0;
}