Description
某天晚上,软院某条狭窄的走廊突然发生了火灾,该走廊只有首尾两个出口,且因为过于狭窄,两个人不能并排。假设t=0的时候发生了火灾,此时有N个人在长度为L的走廊里,走廊的最左端的坐标是(0,0),最右端的坐标是(L,0), 第ii个人的位置是(Di,0)。面朝左边或者右边,用0和1分别表示面朝左边和右边。假设从火灾发生的时刻开始,每个人都朝着t=0时面朝的方向以1的速度前进。当两个人相遇的时候两个人会立马掉头回跑。为了所有人的安全,请计算出所有人离开走廊时的时刻。(初始状态下不会有两个人在同一个位置。)
Input
第一行有一个整数T(T<10)表示有T个案例,每个案例的第一行有两个整数N(0<N<10^5)
和L(0<L<10^5)意义如上所述,接下来是N行,第i行有两个数Di和z (0<Di<L),表示第i个人的位置是(Di,0)和z(0或1,0表示面朝向左,1表示面朝向右)。
Output
输出所有人都离开走廊的时间
Sample Input 1
1
2 10
5 1
8 0
Sample Output 1
8
分析总结:
最后让求的是时间,当两个人碰面时,可以考虑为没有掉头,直接穿过去就行,就相当于换人也行。反正让求的是最后的时间嘛。
求全部人都离开走廊的时间,也就是求最慢的内个人出去的时间,即每个人面向出口的距离的最大值(速度为1)
分情况考虑:0是向左走,即保留坐标的最大值
1是向右走,即保留坐标的最小值,注意要用走廊的长度减去此坐标
不说了,上代码:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int ans=0;
while(n--)
{
int a,b;
scanf("%d%d",&a,&b);
while(a--)
{
int c,d;
scanf("%d%d",&c,&d);
if(d==0)
{
if(c>ans)ans=c;
}
if(d==1)
{
c=b-c;
if(c>ans)ans=c;
}
}printf("%d",ans);
}return 0;
}
以后就,直接用c吧
还有,以后要注意: 变量名的问题 ,,,