Northk机器人

l 问题描述:

Northk部署了一个机器人集群。

一个机器人集群包含N条不同的直线,每一条直线都经过点0,该点为NorthK的总部。对每个合法的i,第i条直线上有Mi个机器人。

对每个合法的i,j,一开始时第i条线上的第j个机器人的坐标为一个非零的整数Xi,j,其意义如下:

该机器人离0点的距离为|Xi,j|。

我们给第i条直线选定一个方向。这个方向本身并不重要,重要的是对这一条直线上的所有机器人,我们选择的方向应该都是相同的。

如果Xi,j为正值,该机器人在0点往该方向|Xi,j|距离的位置。否则它在0点往相反方向|Xi,j|距离的位置。

换句话说,对于第i条直线上的两个机器人j,k,如果Xi,j和Xi,k的符号相同,则它们在0点的同一侧,否则它们在0点的不同侧。

所有机器人以相同的速度匀速前进。一开始,所有机器人都向0点前进。当两个或者多个机器人碰头的时候(可能在0点处碰头),所有机器人都会调头,并沿着相反方向以相同速度匀速移动。我们管这样的事件焦作碰撞。如果一个机器人走到了0点,如果没有遇见其他机器人,那么它会沿着之前的方向继续前进。一个机器人可能会多次改变方向。

请计算出所有机器人之间的总碰撞次数。注意:如果多于两个机器人在同一地点相遇,我们只记为一次碰撞。

l 要求:

完成题目对应的程序模板(NorthkingRobot)中的方法:

Int getNumberOfEncounters(String[] robots);

该方法的入口参数robots为一个字符串数组,容量为N,其中每一个元素代表了一条直线上的所有机器人的初始位置,该直线上的机器人位置使用英文逗号字符“,”作为分隔符,例如“1,-1,2”表示该直线上初始有3个机器人,其位置分别为1,-1,和2。

最后输出结果为所有机器人之间的总碰撞次数。

入口参数提示:

  1. 直线的数量N,1≤N≤2*10^5
  2. 每条直线上的机器人数量Mi,1≤Mi≤5*10^5

评分提示:对每个测试样例,程序运行时间要求小于2分钟,如果超过2分钟未完成的,直接记录为该样例测试不通过。

l 样例:

样例1:

输入:[“-2,1”,“1”]

输出:1

解释:0点处X0,1和X1,0碰撞,之后再无碰撞。(线、机器人编号从0起)

样例2:

输入:[“-2,1”,“-1,2”]

输出:3

解释:X0,1和X1,0在0处碰撞;X1,0和X1,1在线1的1/2处碰撞;X0,0和X1,0在0点处碰撞。

posted @ 2024-04-02 13:45  理想与现实之争  阅读(11)  评论(0编辑  收藏  举报