2301_76816428 2023-03-18 19:33 采纳率: 57.1%
浏览 15

求算法题的正确的求解编号的思路

n只蚂蚁以每秒1cm的速度在长为Lcm的竿子上爬行。当蚂蚁爬到竿子的端点时就会掉落。
由于竿子太细,两只蚂蚁相遇时,它们不能交错通过,只能各自反向爬回去。对于每只蚂蚁,
我们知道它距离竿子左端的距离Xi,并知道它初始的朝向。
请计算  最后落下的蚂蚁编号和落下的时间。

输入格式:
第一行,第一个数是L,第二个数是n(n<2000),两个数之间有一个空格。
接下来一行是2n个整数,每个数之间有空格隔开,每两个数表示一只蚂蚁的Xi和它的朝向,1表示向前(即向X比较大的方向),0表示向后(即向X=0的方向)

输出格式:
两个整数,最后落下的蚂蚁号(蚂蚁的编号按初始坐标从最左端开始,从左到右编号,从0号开始计)和最后的时间,不要回车,如果有多个最后落下的蚂蚁,输出编号最大的。

样例输入:
39 4
19 1 10 0 14 1 25 0

输出样例:
2 25

求时间自己没有问题,但是求最后落下的蚂蚁自己有逻辑错误,就是为甚=什么最后落下的蚂蚁的编号不是时间最长的

  • 写回答

4条回答 默认 最新

  • 追cium 2023-03-18 19:39
    关注

    参考GPT和自己的思路:

    根据题目描述,当两只蚂蚁相遇时,它们只能各自反向爬回去,也就是说,两只蚂蚁会穿过对方,相当于它们发生了一次“穿透”事件。因此没有必要去考虑两只蚂蚁之间的顺序,直接考虑每只蚂蚁的状态即可。

    当蚂蚁往反方向爬行时,其相当于没有运动,因此只需要考虑往正方向爬行的蚂蚁即可。又因为每只蚂蚁的速度都是1cm/s,因此离某个端点较远的蚂蚁会比离端点较近的蚂蚁先掉落。

    如果我们把离左端点距离排序,则编号最大的蚂蚁即为最后掉落的蚂蚁(因为编号越大,离右端点越近)。而最后掉落的时间则是所有蚂蚁中离左端点距离最大的距离和右端点距离最大的距离中的较大值。

    因此,只需要对每只往正方向爬行的蚂蚁按照离左端点距离从小到大排序,然后找到距离左右端点距离最大的蚂蚁,即可得到最后落下的蚂蚁编号和时间。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月18日

悬赏问题

  • ¥15 esp8266控制共阳极wrgb灯板无法关闭所有led灯
  • ¥100 python读取速度问题
  • ¥15 stm32f407使用DMA问题
  • ¥15 您好 这个API接口该怎么弄 网站搭建好了 API也有 现在就不知道该怎么填写API 不知道怎么用
  • ¥88 用uniapp写一个多端的程序,用到高德地图,用高德的JSAPI吗?
  • ¥20 关于#c++#的问题:水果店管理系统
  • ¥30 dbLinq最新版linq sqlite
  • ¥20 对D盘进行分盘之前没有将visual studio2022卸载掉,现在该如何下载回来
  • ¥15 完成虚拟机环境配置,还有安装kettle
  • ¥15 有人会搭建生鲜配送自营+平台的管理系统吗