[哈希/二分]P1102 A-B 数对 - 洛谷

P1102 A-B 数对 - 洛谷 | 计算机科学教育新生态

题目来源

洛谷

题目内容

A-B 数对

题目背景

出题是一件痛苦的事情!

相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!

题目描述

给出一串正整数数列以及一个正整数 C C C,要求计算出所有满足 A − B = C A - B = C AB=C 的数对的个数(不同位置的数字一样的数对算不同的数对)。

输入格式

输入共两行。

第一行,两个正整数 N , C N,C N,C

第二行, N N N 个正整数,作为要求处理的那串数。

输出格式

一行,表示该串正整数中包含的满足 A − B = C A - B = C AB=C 的数对的个数。

样例 #1

样例输入 #1

4 1
1 1 2 3

样例输出 #1

3

提示

对于 75 % 75\% 75% 的数据, 1 ≤ N ≤ 2000 1 \leq N \leq 2000 1N2000

对于 100 % 100\% 100% 的数据, 1 ≤ N ≤ 2 × 1 0 5 1 \leq N \leq 2 \times 10^5 1N2×105 0 ≤ a i < 2 30 0 \leq a_i <2^{30} 0ai<230 1 ≤ C < 2 30 1 \leq C < 2^{30} 1C<230

2017/4/29 新添数据两组

知识点

哈希|二分

题目思路

  1. 利用哈希的O(1)的查询快速得出结果
    将问题转化成:在哈希表内能否找到两个数字A 和 B 相减起来等于 C
    先存好A 利用 B = A - C 遍历查找是否存在于哈希表中
  2. 利用 A - B = C 转化成 A = B + C
    将B+C存到哈希表中 查找A 是否存在
  3. 二分计算满足条件(大于等于b+c)的元素数量 并减去满足条件(小于b+c)的元素数量 得出 B + C = A 的个数 然后计数

AC代码

解法一:哈希 + 查重计数 + 枚举 B

//
// Created by Jisam on 28/09/2024 11:34 PM.
// Solution of  A-B 数对
// 2024-09-28 23:38:23 AC 100 哈希 + 查重计数
#include <bits/stdc++.h>#define  int long long
using namespace std;signed main() {cin.tie(nullptr)->sync_with_stdio(false);// 读取输入的整数n和c的值int n, c;cin >> n >> c;// 初始化一个长度为n的整数数组avector<int> a(n);// 初始化计数器cnt为0,用于后续计算符合条件的对数int cnt = 0;// 初始化一个无序映射maps,用于统计数组a中每个元素出现的次数unordered_map<int, int> maps;// 遍历数组a,读取每个元素的值,并在maps中更新对应值的出现次数,同时将元素的值减去cfor (auto &x : a) {cin >> x;maps[x] += 1; x -= c;  }// 遍历数组a,累计maps中每个元素出现的次数,计算符合条件的对数for (int i = 0; i < n; i++) {cnt += maps[a[i]];}// 输出符合条件的对数cout << cnt << endl;return 0
}

解法二:哈希 + 查重计数+ 枚举 A

//
// Created by Jisam on 28/09/2024 11:34 PM.
// Solution of  A-B 数对
// 2024-09-28 23:49:03 AC 100 哈希 + 查重计数
#include <bits/stdc++.h>#define  int long long
using namespace std;signed main() {cin.tie(nullptr)->sync_with_stdio(false);// 读取输入的整数n和c,分别代表数组长度和待加常量int n, c;cin >> n >> c;// 初始化长度为n的整型数组avector<int> a(n);// 初始化计数器cnt,用于统计结果int cnt = 0;// 初始化哈希表maps,用于快速查找数组中每个元素加c后的出现次数unordered_map<int, int> maps;// 遍历数组a,读取每个元素并更新哈希表for (auto &x : a) {cin >> x;// 增加元素加c后在哈希表中的计数maps[x + c] += 1;}// 遍历数组a,累加每个元素加c后在数组中出现的次数到cntfor (int i = 0; i < n; i++) {cnt += maps[a[i]];}// 输出最终的累加结果cntcout << cnt << endl;return 0
}

解法三:二分 * 2

//
// Created by Jisam on 28/09/2024 11:34 PM.
// Solution of  A-B 数对
// 2024-10-03 13:08:15 AC 100 二分 * 2
#include <bits/stdc++.h>#define  int long long
using namespace std;signed main() {cin.tie(nullptr)->sync_with_stdio(false);// 输入变量n和c的值int n, c;cin >> n >> c;// 初始化一个大小为n的整数数组avector<int> a(n);int cnt = 0;// 通过cin依次输入数组a的每个元素的值for (auto &B: a) {cin >> B;}// 对数组a进行排序,以便后续处理sort(a.begin(), a.end());// 遍历排序后的数组a,计算每个元素满足条件的元素数量for (auto B: a) {// 计算满足条件(大于等于b+c)的元素数量,并减去满足条件(小于b+c)的元素数量 得出 B + C  = A 的个数cnt += ((upper_bound(a.begin(), a.end(), B + c) - a.begin()) - (lower_bound(a.begin(), a.end(), B + c) - a.begin()));}// 输出满足条件的元素总数cout << cnt << endl;return 0
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/55597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pikachu-Sql-Inject - 基于时间的盲注

基于时间的盲注&#xff1a; 就是前端的基于time 的盲注&#xff0c;什么错误信息都看不到&#xff0c;但是还可以通过特定的输入&#xff0c;判断后台的执行时间&#xff0c;从而确定注入。 mysql 里函数sleep() 是延时的意思&#xff0c;sleep(10)就是数据库延时10 秒返回内…

Android Framework AMS(02)AMS启动及相关初始化5-8

该系列文章总纲链接&#xff1a;专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节主要涉及systemserver启动AMS及初始化AMS相关操作。同时由于该部分内容过多&#xff0c;因此拆成2个章节&#xff0c;本章节是第二章节&…

唯有经久鱼水情 堪负重任

唯有经久鱼水情 堪负重任

18734 拓扑排序

### 思路 1. **建模问题**&#xff1a;将课程和依赖关系建模为有向图&#xff0c;其中课程是节点&#xff0c;依赖关系是有向边。 2. **选择算法**&#xff1a;使用拓扑排序算法来确定课程的学习顺序。由于需要确保输出唯一性&#xff0c;同等条件下编号小的课程排在前面&…

EventSource是什么,和axios区别,以及SSE是什么

EventSource、axios以及SSE&#xff08;Server-Sent Events&#xff09;在Web开发中各自扮演着不同的角色&#xff0c;以下是它们的详细解释及区别&#xff1a; EventSource 定义&#xff1a;EventSource是浏览器提供的用于接收SSE事件的接口。它允许客户端通过HTTP协议与服务…

OpenCV视频I/O(19)视频写入类VideoWriter之释放 VideoWriter 对象占用的资源函数release()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 关闭视频编写器。 该方法会在后续的 VideoWriter::open 调用和 VideoWriter 析构函数调用时自动调用。 cv::VideoWriter::release() 函数用于释放…

将自己写好的项目部署在自己的云服务器上

准备工作 这里呢我要下载的终端软件是Xshell 如图&#xff1a; 自己准备好服务器&#xff0c;我这里的是阿里云的服务器&#xff0c; 如图&#xff1a; 这两个准备好之后呢&#xff0c;然后对我们的项目进行打包。 如图&#xff1a; 这里双击打包就行了。 找到自己打成jar包…

桌面时钟哪个好?今年最热门的桌面时钟主题

桌面时钟可以让我们更方便的知道当前的时间&#xff0c;日期&#xff0c;因为它非常直观的展示在桌面上&#xff0c;当我们需要看时间的时候&#xff0c;一眼就可以看到了&#xff0c;这是一个非常便捷的功能&#xff0c;我们一起来看下《芝麻时钟》&#xff08;下载地址&#…

停车位识别数据集 图片数量12416张YOLO,xml和txt标签都有; 2类类别:space-empty,space-occupied;

YOLO停车位识别 图片数量12416张&#xff0c;xml和txt标签都有&#xff1b; 2类类别&#xff1a;space-empty&#xff0c;space-occupied&#xff1b; 用于yolo&#xff0c;Python&#xff0c;目标检测&#xff0c;机器学习&#xff0c;人工智能&#xff0c;深度学习&#xff0…

正则表达式【JavaScript】

JavaScript的正则表达式&#xff08;Regular Expressions&#xff0c;简称Regex或RegExp&#xff09;是一种强大的工具&#xff0c;用于匹配字符串中的模式。正则表达式包含许多元字符&#xff08;Metacharacters&#xff09;&#xff0c;这些元字符用于定义模式的结构。 一、…

计算机组成原理之浮点数的加减运算

计算机组成原理之浮点数的加减运算主要涉及以下几个步骤&#xff1a; 1、对阶&#xff1a;由于浮点数的阶码不同&#xff0c;小数点位置不同&#xff0c;不能直接进行尾数加减。首先求两数阶码之差&#xff0c;通过小数阶向大数阶看齐的原则&#xff0c;对阶码小的尾数进行移位…

vSAN06:ESA与OSA对比、ESA安装、新架构、工作方式、自动策略管理、原生快照、数据压缩、故障处理

目录 vSAN ESAvSAN ESA 安装ESA新架构ESA工作方式ESA自动策略管理自适应RAID5策略 原生快照支持数据压缩的改进ESA故障处理 vSAN ESA vSAN ESA 安装 流程和OSA完全一致&#xff0c;但要注意要勾选启用vSAN ESA ESA和OSA的底层架构不一样&#xff0c;但是UI上是一致的。 生产环…

【2024最新】华为HCIE认证考试流程

HCIE是华为认证体系中最高级别的ICT技术认证&#xff0c;表示通过认证的人具有ICT领域专业知识和丰富实践经验。 HCIE认证方向&#xff1a;最高认证级别HCIE的技术方向有13个 下面以HCIE-Datacom为例给大家介绍一下&#xff1a; HCIE-Datacom认证考试流程&#xff1a; 1.笔试…

Hive3.x版本调优总结

文章目录 第 1 章 Explain 查看执行计划&#xff08;重点&#xff09;1.1 创建测试用表1&#xff09;建大表、小表和 JOIN 后表的语句2&#xff09;分别向大表和小表中导入数据 1.2 基本语法1.3 案例实操 第 2 章 Hive 建表优化2.1 分区表2.1.1 分区表基本操作2.1.2 二级分区2.…

Ubuntu22——安装并配置局域网文件共享系统Samba

我们将共享目录设置为 /home/takway/share。以下是基于这个新目录的详细步骤&#xff1a; 在Ubuntu上安装并配置Samba 更新系统包列表 打开终端&#xff0c;执行以下命令来确保你的包列表是最新的&#xff1a; sudo apt update安装Samba 安装Samba及其相关工具&#xff1a; sud…

软件都用哪些编程语言写的?

一句话总结编程语言 编程语言千千万&#xff0c;每种语言都有自身独特的魅力。 一句话总结 C语言简洁自然、灵活又可怕。 C是C的超集&#xff0c;类型严格&#xff0c;泛型模板强大至极&#xff0c;博大精深很难摸透。 Java是更安全的C&#xff0c;跨平台中间件的老大哥。 C#为…

vmvare虚拟机centos 忘记超级管理员密码怎么办?

vmvare虚拟机centos 忘记超级管理员密码怎么办?如何重置密码呢? 一、前置操作 重启vmvare虚拟机的过程中,长按住Shift键 选择第一个的时候,按下按键 e 进入编辑状态。 然后就会进入到类似这个界面中。 在下方界面 添加 init=/bin/sh,然后按下Ctrl+x进行保存退出。 init=/bi…

深入探索Vue3组合式API

目录 组合式API的好处 Vue3有哪些生命周期&#xff1f; Vue2.X 和 Vue3.X对比 watch 和 watchEffect 的区别&#xff1f; 1.watch 2.watchEffect watch和watchEffect的对比 ref 与 reactive 的区别&#xff1f; 定义 主要特点 基本用法 与 组件定义 生命周期钩子…

openstack底层创建虚拟机快照和导出快照、浅谈dashboard中主机聚合和可用域的关系

文章目录 openstack底层创建虚拟机快照和导出快照说明获取虚拟机的uuid创建快照导出快照到本地浅谈dashboard中主机聚合和可用域的关系说明主机聚合可用域openstack底层创建虚拟机快照和导出快照 说明 为什么要到底层用命令创建虚拟机快照? 1、dashboard中直接创建快照失败;…

本田汽车投资SiLC Technologies:携手共促自动驾驶技术新飞跃

SiLC Technologies获本田汽车投资:加速自动驾驶技术革新 近日,硅谷光子学初创公司SiLC Technologies宣布获得本田汽车的投资,这一合作标志着双方将共同推进自动驾驶技术领域的革新与发展。本田此次投资不仅体现了对SiLC Technologies技术实力的认可,也彰显了本田在自动驾驶…