火灾逃生(一维版)

火灾逃生(一维版)

Description

某天晚上,软院某条狭窄的走廊突然发生了火灾,该走廊只有首尾两个出口,且因为过于狭窄,两个人不能并排。

假设t=0的时候发生了火灾,此时有N个人在长度为L的走廊里,走廊的最左端的坐标是(0,0),最右端的坐标是(L,0), 第i个人的位置是(Di​,0)。面朝左边或者右边,用0和1分别表示面朝左边和右边。假设从火灾发生的时刻开始,每个人都朝着t=0时面朝的方向以1的速度前进。当两个人相遇的时候两个人会立马掉头回跑。为了所有人的安全,请计算出所有人离开走廊时的时刻。初始状态下不会有两个人在同一个位置。

Input

第一行有一个整数 T T &lt; 10 T(T&lt;10) 表示有T个案例,每个案例的第一行有两个整数N(0<N<10 ^ 5)和L(0<L<10^5),意义如上所述,接下来是N行,第i行有两个数Di​(0<Di<L),表示第i个人的位置是(Di,0)和z(0或1,0表示面朝向左,1表示面朝向右)。

Output

请输出所有人都离开走廊的时刻。

思路:这道题猛的一看,好像有点麻烦,要考虑很多情况,但只要你脑子转一下,就会发现,这道题其实很简单:题中说俩人相遇后掉头回走,这里可以理解为俩人擦身而过,保持原来的状态前进,这样想的话,就只需求出每个人逃离火灾的最大值就行了。

Sample Input 1

1
2 10
5 1
8 0

Sample Output

8

#include<math.h>
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n,a,b,L;
        scanf("%d%d",&n,&L);
        int max1=0;
        int max2=L;
        for(int i=0;i<n;i++)
        {
            scanf("%d%d",&a,&b);
            if(b==0&&a>=max1)
                max1=a;
            else if(b==1&&a<=max2)
                max2=a;
        }
        if(L-max2>=max1)
            printf("%d\n",L-max2);
        else
            printf("%d\n",max1);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43328040/article/details/84575744