天天看点

约会时间计算

【id:168】【10分】H. 约会

题目描述

Alice和Bob都是动车工作人员。然而他们并不服务于同一列动车。

今天,Alice跟随一列动车从深圳去往北京,而Bob跟随另一列动车从北京去往深圳。动车在中途会在某些站点停留一定的时间。

好消息是,两列动车都会在武汉站进行一段时间的停留,这给Alice和Bob创造了见面约会的机会。

已知Alice跟随的动车在[l1,r1]这段时间停在武汉站,Bob跟随的动车在[l2,r2]这段时间中停在武汉站,他们同时在武汉站的时间全部可以用来见面约会。

然而,作为一个爱美的妹子,会可以不约,妆不能不补。所以,Alice在时间区间[l3,r3]中需要补妆。而这段时间中两人是不能够约会的。

相聚总是短暂的,你能计算出两人的约会时间吗?

输入

第一行一个整数t,表示数据组数,不超过100。

每个测试数据第一行包含六个正整数,其中,保证所有数据在整型范围内。

输出

每组数据包含一行,两人约会的时间。

正文

第一想法是采用碰撞检测的思维,有时间再看看其他方法

  #include<stdio.h>

int main(void)

{

    int i,n,k,l1,l2,l3,r1,r2,r3,y1,y2,flag=0,time=0;

    scanf("%d",&n);

    for(i=0;i<n;i++)

   {

    scanf("%d %d %d %d %d %d",&l1,&r1,&l2,&r2,&l3,&r3);

    //女方和男方是否有重合时间

    //女在前

    if(l1<l2&&l2<=r1)

    {

        if(r1>r2)

        {

            time=time+(r2-l2+1);//时间计算定义上有区别,故加一

            y1=l2;

            y2=r2;

        }

        else

        {

            time=time+(r1-l2+1);

            y1=l2;

            y2=r1;

        }    

    }

    //开始时间重合 

    else if(l1==l2)

    {

        if(r1>=r2)

        {

          time=time+(r2-l2+1);

          y1=l2;

          y2=r2;

        }

        else

        {

          time=time+(r1-l1+1);

          y1=l1;

          y2=r1;

        }

    }

    //男在前 

    else if(l1>l2&&l1<=r2)

    {

        if(r1<=r2)

        {

          time=time+(r1-l1+1);

          y1=l1;

          y2=r1;

        }

        else

        {

          time=time+(r2-l1+1);

          y1=l1;

          y2=r2;

        }

    }

    //化妆

    while(time!=0)

    {

        if(l3<y1&&y1<r3)

    {

        if(r3>=y2)

        {

            time=time-(y2-y1+1);

        }

        else

        {

            time=time-(r3-y1+1);

        }    

    }

    //开始时间重合 

    else if(l3==y1)

    {

        if(r3>=y2)

        {

          time=time-(y2-y1+1);

        }

        else

        {

          time=time-(r3-l3+1);

        }

    }

    //男在前 

    else if(l3>y1&&l3<y2)

    {

        if(r3<=y2)

        {

          time=time-(r3-l3+1);

        }

        else

        {

          time=time-(y2-l3+1);

        }

    }

    flag=time;

    time=0;

    } 

    printf("%d\n",flag);

    flag=0; 

   }

   return 0;

}

继续阅读