Cod sursa(job #466360)

Utilizator tudgal1001Profir Tudor tudgal1001 Data 26 iunie 2010 13:15:39
Problema Fibo3 Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 2 Marime 1.92 kb
#include<cstdio>
using namespace std;

long long a[100];
int c_st=0,c_dr=0;

int mini (int x,int y)
{
    if (x<y) return x;
    return y;
}

int maxi (int x,int y)
{
    if (x>y) return x;
    return y;
}

void capete (long long x,long long y)
{
    int st,dr,m;
    st=1; dr=74;
    while (st<=dr)
    {
        if (m==(st+dr+1)/2) break;
        m=(st+dr+1)/2;
        if (a[m]==x) { c_st=m; st=dr+1; }
        else if (a[m]>x) dr=m;
        else st=m+1;
    }
    if (!c_st) c_st=st;
    st=1; dr=74;
    while (st<=dr)
    {
        if (m==(st+dr+1)/2) break;
        m=(st+dr+1)/2;
        if (a[m]==y) { c_dr=m; st=dr+1; }
        else if (a[m]>y) dr=m-1;
        else st=m;
    }
    if (!c_dr) c_dr=st;
}

int main ()
{
    int i,z,n,sum;
    long long sum1,sum2,maxim,minim,x1,x2,y1,y2,mij,nr_max,nr,min_1,min_2,max_1,max_2;
    freopen("fibo3.in","r",stdin);
    freopen("fibo3.out","w",stdout);
    a[1]=1; a[2]=1;
    for (i=3; i<=74; i++)
        a[i]=a[i-1]+a[i-2];
    scanf("%d",&n);
    for (z=1; z<=n; z++)
    {
        scanf("%I64d%I64d",&x1,&y1);
        scanf("%I64d%I64d",&x2,&y2);
        min_1=mini(x1,y1);
        max_1=maxi(x1,y1);
        min_2=mini(x2,y2);
        max_2=maxi(x2,y2);
        minim=min_1+min_2;
        if (x1+y1<minim) minim=x1+y1;
        if (x2+y2<minim) minim=x2+y2;
        maxim=max_1+max_2;
        if (x1+y1>maxim) maxim=x1+y1;
        if (x2+y2>maxim) maxim=x2+y2;
        mij=(minim+maxim)/2;
        nr_max=(maxim-minim+2)/2;
        capete(minim,maxim);
        if (c_st==1) c_st++;
        sum=0;
        for (i=c_st; i<=c_dr; i++)
        {
            nr=a[i];
            if (nr<=mij)
                sum+=nr_max-(mij-nr);
            else
            {
                if ((minim+maxim)%2==1) mij++;
                sum+=nr_max-(nr-mij);
            }
        }
        printf("%d\n",sum);
    }
    return 0;
}