当前位置: 首页 > wzjs >正文

安徽省公共资源交易中心网站网站与微信

安徽省公共资源交易中心网站,网站与微信,天津首页优化外包公司,做头发个人网站制作素材原题描述: 题目精炼: 给定N个建筑物的位置和一个距离D,选取3个建筑物作为埋伏点,找出所有可能的建筑物组合,使得每组中的建筑物之间的最大距离不超过D。最后,输出不同埋伏方案的数量并对99997867取模。 识…

原题描述: 

题目精炼

   给定N个建筑物的位置和一个距离D,选取3个建筑物作为埋伏点,找出所有可能的建筑物组合,使得每组中的建筑物之间的最大距离不超过D。最后,输出不同埋伏方案的数量并对99997867取模。

识别问题

   由于此题的建筑物是一个单调递增的数组(单调性),并且使用“同向双指针”来维护一段区间,保证(判断条件):

        1)right - left +1 >= 3
        2)buildings[right] - buildings[left] <= D
        3)right < buildings.length 或者 left < buildings.lengrh - 2

   因此,我们可以使用“滑动窗口”来求解。

滑动窗口解题思路:

1)左右指针初始化

int left = 0;
int right = 2;

2)满足条件进窗口

注意,要先判断right是否小于数组长度,否则会越界

while(right < buildings.length && buildings[right] - buildings[left] <= D){right++;
}

3)更新结果

此处涉及到求解组合数量问题,为了防止一段区间内,子集重复的问题,每次以buildings[left]为基准,在剩余的buildings中选取两个进行组合,公式为

C(n, 2) = \binom{n}{2} = \frac{n!}{2!(n-2)!} = \frac{n(n-1)}{2}

但是,此处涉及到两个很大的整数相乘,会出现溢出的问题,因此我们可以使用更大的整数类型,将n*(n-1)转换为long类型,并对每次累加后的结果%99997867 防止溢出。

int n = right - left - 1;
long p =((long)n *(n-1))>>1;
count =(count + p)%99997867;

当因为right>=buildings.length而跳出循环时,说明此时没有更大的值了,收集完结果后要对right--,使得right始终停留在最右边界,从而可以继续判断,等待left缩小窗口

if(right >= buildings.length){right--;
}

4)出窗口

left++;

其中,进窗口,更新结果,出窗口是一个不断循环的过程,因此,最终代码为:

import java.util.Scanner;
public class ByteDance_BuildingCombinations {public static void main(String[] args) {Scanner in = new Scanner(System.in);int N = in.nextInt();int D = in.nextInt();int[] buildings = new int[N];for (int i = 0; i < N; i++) {buildings[i] = in.nextInt();}long count = slide(buildings,D);System.out.println(count);}public static long slide(int[] buildings, int D){long count = 0;int left = 0;int right = 2;while(left < buildings.length - 2){while(right < buildings.length && buildings[right] - buildings[left] <= D){right++;}int n = right - left - 1;long p =((long)n *(n-1))>>1;count =(count + p)%99997867;if(right >= buildings.length){right--;}left++;}return count;}
}

http://www.dtcms.com/wzjs/561425.html

相关文章:

  • 产品网站开发服务php做二手商城网站源码
  • 椒江做国际网站的公司wordpress文章摘要缩略图
  • 大型在线网站建设线上营销推广的公司
  • 做企业网站用二级域名好吗南京做网站南京乐识赞
  • 建网站做淘宝客好医生网站继续教育网
  • 龙泉市建设局网站嘉兴网站建设运营
  • wordpress网站地图生成插件海南省交通工程建设局网站
  • 制作app免费网站模板360浏览器怎么加入可信站点
  • 网站运营与推广方案潮流印花图案设计网站
  • 网站模板设计报价单阳春新农村建设网站
  • 网站开发工程师发展趋势阿里ace 安装wordpress 并修改
  • 网站编辑没有经验可以做吗wordpress 内容页模板
  • 网站建设 优化制作灯笼的手工做法视频
  • 精通网站建设 全能建站密码pdf品牌网站建设h5
  • 404网站怎么做许昌市做网站
  • 做网站为什么图片上传不了酒店网站建设趋势
  • phpnow 搭建网站苏州网站推广电话
  • 普通网站建设的缺陷企业网站主页模板
  • 营销型网站建设eyouc合肥黄页
  • 商标 做网站 是几类电商怎么入门
  • 企业网站空间多大上海网站建设 找德华专业
  • 梅州做网站公司网站注册手机号安全吗
  • golang 网站开发 开源网站文章关键字密度
  • 西宁城西区建设局网站asp.net 4.0网站开...
  • 临淄网站建设网站被挂马原因
  • 绵阳网站建设信赖辉煌作一手房用什么做网站
  • 海南营销型网站建设google wordpress
  • 网站建设 维护 编程外贸网络推广怎么做
  • 取外贸网站域名经验html黑什么主题WordPress
  • 商城网站建设怎么建设甘肃艾欧网络科技有限公司