Cod sursa(job #2167395)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 13 martie 2018 21:31:06
Problema Fibo3 Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#include <cstdio>
#define VAL 75
#define DIM 100005
#define INF 2000000000000000
#define LL long long

using namespace std;

LL M, N, i, ANS;
LL X1, Y1, X2, Y2, A, B;
LL F[VAL];

LL GetANS(LL X, LL Y)
{
    if (X<0 || Y<0)
      return 0;
    if (X<Y)
      swap(X, Y);
    LL ANSWER=0;
    for (i=1; i<=M; i++)
    {
        if (F[i]>X+Y)
          break;
        ANSWER+=min(Y, F[i])+1-max(0LL, F[i]-X);
    }
    return ANSWER;
}

char buff[DIM];
int poz=0;

LL numar()
{
    LL nr=0;
    while ('0'>buff[poz] || '9'<buff[poz])
      if (++poz==DIM)
        fread(buff, 1, DIM, stdin), poz=0;
    while ('0'<=buff[poz] && buff[poz]<='9')
    {
        nr=nr*10+buff[poz]-'0';
        if (++poz==DIM)
          fread(buff, 1, DIM, stdin), poz=0;
    }
    return nr;
}

int main()
{
    freopen("fibo3.in", "r", stdin);
    freopen("fibo3.out", "w", stdout);
    N=numar();
    F[0]=F[1]=M=1;
    for (i=2; i<VAL; i++)
    {
        M++;
        F[M]=F[M-1]+F[M-2];
    }
    while (N>0)
    {
        X1=numar();
        Y1=numar();
        X2=numar();
        Y2=numar();
        N--;
        ANS=GetANS(X2, Y2)+GetANS(X1-1, Y1-1);
        ANS-=GetANS(X1-1, Y2);
        ANS-=GetANS(X2, Y1-1);
        printf("%lld\n", ANS);
    }
    return 0;
}