Pagini recente » Cod sursa (job #2545234) | Cod sursa (job #63562) | Cod sursa (job #1002627) | Borderou de evaluare (job #1011036) | Cod sursa (job #466361)
Cod sursa(job #466361)
#include <cstdio>
#define MAXF 1000
#define MAX 2000000000000000LL
#define FIN "fibo3.in"
#define FOUT "fibo3.out"
long long V[MAXF];
int N;
void calc()
{
int aux;
for (V[0] = 4, V[1] = 1, V[2] = 1, V[3] = 2; V[0] <= 71; ++ V[0])
V[V[0]] = V[V[0] - 1] + V[V[0] - 2];
-- V[0];
}
long long min(long long A, long long B)
{
return A < B ? A : B;
}
long long bsearch(long long A, long long B)
{
int i, f, l, m, x1, x2;
long long R;
for (f = 2, l = V[0]; f < l;)
{
m = (f + l) >> 1;
if (V[m] >= A)
l = m;
else
f = m + 1;
}
x1 = f;
for (f = 1, l = V[0]; f < l;)
{
m = (f + l) >> 1;
if (V[m] < B)
f = m + 1;
else
l = m;
}
x2 = f;
for (i = x1, R = 0; i <= x2; ++ i)
R += min(V[i] - A + 1, B - V[i] + 1);
return R;
}
int main()
{
int i;
long long x1, x2, y1, y2;
freopen(FIN, "r", stdin);
freopen(FOUT,"w", stdout);
calc();
scanf("%d", &N);
for (i = 1; i <= N; ++ i)
{
scanf("%lld%lld%lld%lld", &x1, &y1, &x2, &y2);
printf("%lld\n", bsearch(x1 + y1, x2 + y2));
}
}