2021-03-01

字节跳动2019春招研发机试题  万万没想到之抓捕孔连顺

我叫王大锤,是一名特工。我刚刚接到任务:在字节跳动大街进行埋伏,抓捕*孔连顺。和我一起行动的还有另外两名特工,我提议。。。。

这其实是一道数学题。

首先要求两个特工不能在一起,且特工等价,也就是说在n个符合距离条件的位置中,选出给2两个位置给A、B后,剩下的只能是给C,数量为2021-03-01

注意,不是从n个中选3个,因为选三个的话就表示特工不等价了。

其次是因为坐标是从小到大排序的,所以,只要在一定的坐标范围内(最大坐标-最小坐标)<D,那么这个范围内的任意三个坐标都是符合的。将这个范围内的坐标进行排列就可以了。

最后,将所有排列数求合就可以了。

import java.util.Scanner;
public class Main2 
{
	public static void main(String arg[])
	{
		long n, d, count = 0;
		Scanner in=new Scanner(System.in);
		n=in.nextInt();
		d=in.nextInt();
		int v[]=new int[(int)n];
	 
	    for (int i = 0, j = 0; i < n; i++) //采用双指针,i指向最大坐标,j指向最小坐标
        {
	    	v[i]=in.nextInt(); 	       
	        while (i >= 2 && (v[i]-v[j])> d)  //如果(最大坐标-最小坐标)>D,则将指针移到下一个最小坐标,直到(最大坐标-最小坐标)<D
            {
	            j++;
	        }
	        count += caculate(i - j);  //i-j表示:i和j之间有几个符合条件的坐标
	    }
	    in.close();
	    System.out.println(count % 99997867); 
	}
	public static long caculate(long  n)   //n个符合条件的坐标中有多少种符合条件的排列
	{
	    return (n-1) * n / 2;
	}

}

 

 

 

 

上一篇:考研机试 25.最小花费


下一篇:读取一行整数到数组中