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

蓝桥杯第1374题——锻造兵器

题目描述


小明一共有n块锻造石,第块锻造石的属性值为ai.
现在小明决定从这n块锻造石中任取两块来锻造兵器
通过周密计算,小明得出,只有当两块锻造石的属性值的差值等于C,兵器才能锻造成功
请你帮小明算算,他有多少种选取锻造石的方案可以使得锻造成功


输入描述


第一行包含两个整数n,C,其含义如题所述
接下来一行包含n个整数,分别表示a1,a2,··,an.
1 < N < 2 x 10^5,|ai| < 10^4,0 < C < 10^9


输出描述


输出共一行,包含一个整数,表示答案.


输入输出样例

6 3

8 4 5 7 7 4

 5

解题思路

这个题是一道典型的双指针题,要控制快指针和慢指针所对应的数据之差为C。

首先,使用排序方法对输入数据进行排序是必要的。

然后快指针优先移动,直到快慢指针数据之差至少为C;接下来慢指针进行移动,如果不是C(就一定比C大)就往后移动,直到快慢指针之差至多为C。

到此就是一组快慢指针的移动,此时可以判断快慢指针数据之差是否为C,如果是,就对ans做更新。这题的关键是ans更新多少,我们思考后不难发现,按照题目提供的例子,两个7的石头可以与两个4的石头分别组成一组,这意味着组合数量是满足要求的两个数值的石头的个数乘积,那么我们只需要对快慢指针分别派生出一个新指针,分别向后步进进行计数即可。

下面给出代码:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.math.BigInteger;
import java.util.*;public class Main {public static void main(String[] args) throws IOException {Scanner sc = new Scanner(System.in);BufferedReader in = new BufferedReader(new InputStreamReader(System.in));String[] temp = in.readLine().split(" ");int n = Integer.parseInt(temp[0]);int c = Integer.parseInt(temp[1]);temp = in.readLine().split(" ");int[] data = new int[n];for (int i = 0; i < n; i++) {data[i] = Integer.parseInt(temp[i]);}Arrays.sort(data);int slow = 0, fast = 0;long ans = 0;while (fast < n) {while (fast < n && data[fast] - data[slow] < c) {fast++;}while (fast < n && data[fast] - data[slow] > c) {slow++;}if (fast < n && data[fast] - data[slow] == c) {int oldFast = fast, oldSlow = slow;while (fast < n && data[fast] == data[oldFast]) {fast++;}while (slow < n && data[slow] == data[oldSlow]) {slow++;}ans += (long) (fast - oldFast) * (slow - oldSlow);}}System.out.println(ans);}
}

http://www.lryc.cn/news/305857.html

相关文章:

  • 坚鹏:政府数字化转型数字机关、数据共享及电子政务类案例研究
  • 【架构】面向人工智能 (AI) 的硬件的可靠性(2021)
  • Unity3D MVC开发模式与开发流程详解
  • 简单介绍一下Android里面的IntentFirewall
  • Stable Diffusion 3 发布及其重大改进
  • 【后端】springboot项目
  • React Native调用摄像头画面及拍照和保存图片到相册全流程
  • Kubernetes基本部署概念
  • QT c++ 海康红外热像仪
  • OpenAI 的 GPTs 提示词泄露攻击与防护实战:防御卷(一)
  • 中科大计网学习记录笔记(十五):可靠数据传输的原理
  • 五种多目标优化算法(MOGWO、MOJS、NSWOA、MOPSO、MOAHA)性能对比(提供MATLAB代码)
  • 力扣:93. 复原 IP 地址
  • 利用序列化和反序列化实现深拷贝
  • 【AHK】68键键盘键位布局优化/esc改退格键/回车键
  • 计算机体系架构初步入门
  • 常见的序列化数据结构方法及其优缺点汇总
  • 华清远见嵌入式学习——驱动开发——作业1
  • 小苯的IDE括号问题(CD) -----牛客小白月赛87(双链表)
  • Redis如何修改key名称
  • 浅谈redis之SDS
  • 数据结构知识点总结-线性表(1)-线性表的定义、基本操作、顺序表表示
  • Spring Boot 手写starter!!!
  • 移动端自动化常用的元素定位工具 介绍
  • 问题:Spark SQL 读不到 Flink 写入 Hudi 表的新数据,打开新 Session 才可见
  • 数学建模资料分享
  • 应用配置管理
  • This dependency was not found解决方法
  • 基于SpringBoot的停车场管理系统
  • SQL库操作