【洛谷 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;
}
目录
相关文章
|
数据库
主题域、概念、逻辑、物理四种模型有什么区别与联系?
主题域、概念、逻辑、物理四种模型有什么区别与联系?
解决attempted to register plugin but it was already registered with this flutterengine
解决attempted to register plugin but it was already registered with this flutterengine
233 2
|
IDE API 开发工具
Gleam
Gleam 是面向 Erlang 虚拟机的类型化语言,Gleam 的语法对于类型化语言来说非常优雅和简单。如果能看到 Gleam 像 Elixir 一样成功,那就太酷了。
599 4
|
9月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
1924 65
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
6月前
|
SQL 数据库
【YashanDB知识库】YAS-04209 unexpected word ;
【YashanDB知识库】YAS-04209 unexpected word ;
|
人工智能 安全 算法
程序员的护城河:技术、创新与沟通的艺术
程序员的护城河:技术、创新与沟通的艺术
159 0
|
算法 程序员 PHP
编写魅力十足的代码:优化可读性、维护性和性能的关键
本篇汇总了平时在工作开发中常遇到的业务逻辑的优雅写法,也汇总了自己还是新人时,拿到一个业务不知道怎么下手的痛点,依稀记得那时候总感觉自己写的代码不规范。 写完之后,感觉还是美好的,又学到东西了。
|
消息中间件 测试技术 领域建模
DDD - 一文读懂DDD领域驱动设计
DDD - 一文读懂DDD领域驱动设计
38394 5
|
流计算 API Java
带你读《Flink原理、实战与性能优化》之三:Flink编程模型
这是一部以实战为导向,能指导读者零基础掌握Flink并快速完成进阶的著作,从功能、原理、实战和调优等4个维度循序渐进地讲解了如何利用Flink进行分布式流式应用开发。作者是该领域的资深专家,现就职于第四范式,曾就职于明略数据。
|
监控 Java 容器
Chaos带你快速上手混沌工程-学习记录
Chaos带你快速上手混沌工程-学习记录
161 0