【洛谷 P1102】A-B 数对 题解(向量+lower_bound+upper_bound)

简介: 这是一个编程题目,要求计算给定正整数序列中满足 \( A - B = C \) 的数对个数。输入包含两行:正整数 \( N \) 和 \( C \),以及一串正整数。输出是满足条件的数对数量。使用排序和二分查找优化算法,代码中给出了 AC 解决方案。样例输入为 \( N=4, C=1 \),序列 \( 1, 1, 2, 3 \),输出为 \( 3 \)。数据范围:\( 1 \leq N \leq 2 \times 10^5 \),\( 0 \leq a_i < 2^{30} \),\( 1 \leq C < 2^{30} \)。

A-B 数对

题目背景

出题是一件痛苦的事情!

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

题目描述

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

输入格式

输入共两行。

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

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

输出格式

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

样例 #1

样例输入 #1

4 1
1 1 2 3

样例输出 #1

3

提示

对于 $75\%$ 的数据,$1 \leq N \leq 2000$。

对于 $100\%$ 的数据,$1 \leq N \leq 2 \times 10^5$,$0 \leq a_i <2^{30}$,$1 \leq C < 2^{30}$。

2017/4/29 新添数据两组

思路

A - B = C 可转化为 A = B + C。用向量存储元素并从小到大排序。
对于二分查找元素A,upper_bound减lower_bound即元素A重复的次数。将查找起点设在B处可以节约时间。

AC代码

#include <iostream>
#include <vector>
#include <algorithm>
#define AUTHOR "HEX9CF"
using namespace std;

int n, c;
long long cnt = 0;
vector<int> v;

int main(){
   
    cin >> n >> c;
    for(int i = 0; i < n; i++){
   
        int t;
        cin >> t;
        v.push_back(t);
    }
    vector<int>::iterator it = v.begin();
    sort(v.begin(), v.end());
    for(; it != v.end(); it++){
   
        cnt += upper_bound(it, v.end(), *it + c) - lower_bound(it, v.end(), *it + c);
    }
    cout << cnt << endl;
    return 0;
}
目录
相关文章
|
API
【工具推荐】 Obsidian 插件 Obsidian to Flomo 一键同步内容到 Flomo 插件
Obsidian to Flomo 是一款可以一键发送内容到 Flomo 的Obsidian 插件。
1415 0
|
数据库
主题域、概念、逻辑、物理四种模型有什么区别与联系?
主题域、概念、逻辑、物理四种模型有什么区别与联系?
解决attempted to register plugin but it was already registered with this flutterengine
解决attempted to register plugin but it was already registered with this flutterengine
320 2
|
IDE API 开发工具
Gleam
Gleam 是面向 Erlang 虚拟机的类型化语言,Gleam 的语法对于类型化语言来说非常优雅和简单。如果能看到 Gleam 像 Elixir 一样成功,那就太酷了。
693 4
|
11月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
2515 65
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
8月前
|
SQL 数据库
【YashanDB知识库】YAS-04209 unexpected word ;
【YashanDB知识库】YAS-04209 unexpected word ;
|
人工智能 小程序 Java
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
本文介绍了一款名为PyWxDump的开源工具,它可以获取微信账户信息、解密SQLite数据库以查看和备份聊天记录。此工具适用于已登录电脑版微信的用户,通过GitHub下载后简单几步即可操作。适合对数据恢复感兴趣的开发者,但请注意合法合规使用并尊重隐私。
2336 2
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
|
存储 人工智能 数据挖掘
AI大模型量化
AI大模型量化
619 0
|
人工智能 安全 算法
程序员的护城河:技术、创新与沟通的艺术
程序员的护城河:技术、创新与沟通的艺术
198 0
|
算法 程序员 PHP
编写魅力十足的代码:优化可读性、维护性和性能的关键
本篇汇总了平时在工作开发中常遇到的业务逻辑的优雅写法,也汇总了自己还是新人时,拿到一个业务不知道怎么下手的痛点,依稀记得那时候总感觉自己写的代码不规范。 写完之后,感觉还是美好的,又学到东西了。