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

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

这其实是一道数学题。

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

注意,不是从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;
	}

}

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值