Pagini recente » Cod sursa (job #980790) | Cod sursa (job #975754) | Cod sursa (job #2907423) | Cod sursa (job #51522) | Cod sursa (job #466120)
Cod sursa(job #466120)
#include <cstdio>
#define MAXF 100
#define MAX 2000000000
#define FIN "fibo3.in"
#define FOUT "fibo3.out"
long long V[MAXF];
int N;
void calc()
{
for (V[0] = 4, V[1] = 1, V[2] = 1, V[3] = 2; V[V[0]] <= MAX; ++ V[0])
{
V[V[0] - 2] = V[V[0] - 1];
V[V[0] - 1] = V[V[0] - 2];
V[V[0]] = V[V[0] - 1] + V[V[0] - 1];
}
-- 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 = 1, 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));
}
}