第十三届校赛之蚂蚁走木条(1218)

在一根长度为n米的木条上有m只蚂蚁。时刻0的时候,每只蚂蚁都停留在木条上的不同位置Pi并且开始爬行,有的蚂蚁是向左运动,有的蚂蚁是向右运动;当蚂蚁运动至位置0或者位置n的时候就可以看作蚂蚁离开了这个木条。已知蚂蚁的速度是每秒爬行1米,并且当两只蚂蚁相遇时(运动至同一位置),两只蚂蚁都会改变爬行方向继续爬行。我们可以认定蚂蚁改变爬行方向的时间忽略不计。那么问题来了,当所有蚂蚁都离开木条所需要的时间是?
Description
多组测试数据,每组测试数据第一行仅含两个整数n,m(0 接下来m行,每行包含两个整数Pi,Mi(0 -1表示运动方向向左,即是朝着位置减小的方向; 
1表示运动方向向右,即是朝着位置增大方向。 
题目保证最开始没有两个蚂蚁在同一位置。
Input
对于每组测试数据输出当所有蚂蚁都离开木条的时刻。
Output
1
2
3
4
5
10 1
5 1
3 2
1 1
2 -1
Sample Input
1
2
5
2
Sample Output
对于第一组数据: 
蚂蚁1从5运动到10需要5秒。则它离开木条的时刻为5. 
对于第二组数据: 
蚂蚁1从位置1运动,蚂蚁2从位置2运动,0.5秒后在位置1.5相遇, 
两个蚂蚁反向继续运动,蚂蚁1在时刻2运动到位置0离开木条,蚂蚁2在时刻2运动到位置3离开木条,所以当所有蚂蚁都离开木条的时刻为2.


/*题解:

对于蚂蚁相撞可以不考虑,因为碰撞后总耗时是一样的
所以所有蚂蚁中的最大耗时就是答案

*/




#include
#include
#include
using namespace std;


int main()
{
	int n, m;
	int a, b;
	while (cin >> n >> m)
	{
		int ans = 0;
		for (int i = 0; i < m; i++)
		{
			cin >> a >> b;
			int temp = 0;
			if (b < 0)
			{
				temp = a;
			}
			else
			{
				temp = n - a;
			}

			ans = max(ans, temp);
		}


		cout << ans << "\r\n";
	}
	return 0;
}




你可能感兴趣的:(第十三届校赛)