【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;
}