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

在一根长度为n米的木条上有m只蚂蚁。时刻0的时候,每只蚂蚁都停留在木条上的不同位置Pi并且开始爬行,有的蚂蚁是向左运动,有的蚂蚁是向右运动;当蚂蚁运动至位置0或者位置n的时候就可以看作蚂蚁离开了这个木条。已知蚂蚁的速度是每秒爬行1米,并且当两只蚂蚁相遇时(运动至同一位置),两只蚂蚁都会改变爬行方向继续爬行。我们可以认定蚂蚁改变爬行方向的时间忽略不计。那么问题来了,当所有蚂蚁都离开木条所需要的时间是?
Description
多组测试数据,每组测试数据第一行仅含两个整数n,m(0<m<n<=100)。
接下来m行,每行包含两个整数Pi,Mi(0<pi<n,mi取值为-1或者1)表示每个蚂蚁的最初位置和运动方向。
-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<stdio.h>
#include<iostream>
#include<algorithm>
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;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值