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。
最后输出结果为所有机器人之间的总碰撞次数。
入口参数提示:
- 直线的数量N,1≤N≤2*10^5
- 每条直线上的机器人数量Mi,1≤Mi≤5*10^5
评分提示:对每个测试样例,程序运行时间要求小于2分钟,如果超过2分钟未完成的,直接记录为该样例测试不通过。
l 样例:
n 样例1:
输入:[“-2,1”,“1”]
输出:1
解释:0点处X0,1和X1,0碰撞,之后再无碰撞。(线、机器人编号从0起)
n 样例2:
输入:[“-2,1”,“-1,2”]
输出:3
解释:X0,1和X1,0在0处碰撞;X1,0和X1,1在线1的1/2处碰撞;X0,0和X1,0在0点处碰撞。
本文来自博客园,作者:理想与现实之争,转载请注明原文链接:https://www.cnblogs.com/Alisa-zmj/p/18110405
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.