Cod sursa(job #1760686)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 21 septembrie 2016 09:00:11
Problema Fibo3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>

#define MAXN 10000000

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 void precalc(){
    n=1;
    fib[0]=fib[1]=1;
    while(fib[n]<=1000000000000000LL){
        n++;
        fib[n]=fib[n-1]+fib[n-2];
    }
    printf("%d\n", n);
}

inline int solve(long long a, long long b, long long h){
    long long ans=0;
    for(int i=1; i<n; i++)
        if((a<=fib[i])&&(fib[i]<=b))
            ans+=min2(1+min2(fib[i]-a, b-fib[i]), h);
    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, min2(y-b+1, x-a+1)));
    }
    fclose(fin);
    fclose(fout);
    return 0;
}