【洛谷 P1102】A-B 数对 题解(映射)

简介: 这是一个编程题目,要求计算给定正整数序列中满足 \( A - B = C \) 的数对个数。输入包含两行:正整数 \( N \) 和 \( C \),以及一串正整数。使用一个哈希映射记录每个数字出现的次数,然后遍历映射,如果找到 \( A = B + C \),则累加对应计数。样例输入输出为 \( N=4, C=1 \),数列为 \( 1 1 2 3 \),答案为 \( 3 \)。代码使用 C++ 实现,通过维护一个映射来存储数字频率并计算数对。

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。用map记录数字出现的次数。
若在map中,查找到存在A = B + C ,计数器加上A出现的次数与B出现的次数的乘积。

AC代码

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

int n, c;
long long cnt = 0;
map<int, long long> m;

int main()
{
   
    cin >> n >> c;
    for (int i = 0; i < n; i++)
    {
   
        int t;
        cin >> t;
        m[t]++;
    }
    map<int, long long>::iterator it = m.begin(), fit;
    for (; it != m.end(); it++)
    {
   
        // cout << it->first << " " << it->second << endl;
        if (m.end() != (fit = m.find(it->first + c)))
        {
   
            cnt += it->second * fit->second;
        }
    }
    cout << cnt << endl;
    return 0;
}
目录
相关文章
|
存储 算法 Java
【DFS(深度优先搜索)详解】看这一篇就够啦
本文介绍了深度优先搜索(DFS)算法及其应用。DFS从某个顶点出发,深入探索图的每条路径,直到无法前进为止,然后回溯。文章详细解释了DFS的基本思想,并通过示例图展示了其执行过程。此外,文中还探讨了三种枚举方式:指数型枚举、排列型枚举和组合型枚举,并提供了具体的代码实现。最后,文章通过几道练习题帮助读者更好地理解和应用DFS算法。
8796 19
【DFS(深度优先搜索)详解】看这一篇就够啦
|
数据安全/隐私保护
【洛谷 P1928】外星密码 题解(递归+字符串)
外星密码挑战涉及解压缩由重复子串压缩的字符串,如`[3FUN]`代表`FUNFUNFUN`。输入是一行压缩过的字符串,输出是解压缩的结果。代码使用递归方法,遇到`[`读取重复次数并解压下一层,遇到`]`返回当前层结果,否则直接添加字符。样例输入`AC[3FUN]`输出`ACFUNFUNFUN`。处理的数据限制为解压后长度在20000内,最多十重压缩。
249 0
|
存储
【洛谷 P1255】数楼梯 题解(递归+记忆化搜索+高精度)
这是一个使用动态规划解决的“数楼梯”问题。给定楼梯数`N`,求不同上楼方式的数量。程序通过递归函数`f()`计算,其中`f(x) = f(x - 1) + f(x - 2)`,初始条件`f(1) = 1`,`f(2) = 2`。考虑到数据规模可能很大,使用了高精度加法运算。样例输入`4`,输出`5`。代码中定义了一个存储中间结果的向量`mem`,并提供了一个用于显示高精度数的`printv()`函数。
258 0
|
C++
【PTA】L1-033 出生年(C++)
【PTA】L1-033 出生年(C++)
272 0
【PTA】L1-033 出生年(C++)
|
12月前
|
搜索推荐 安全
如果您干不动跨境外贸独立站,可以来看看反向海淘代购模式
反向海淘代购模式是指海外消费者通过国内电商平台购买中国商品,再由代购方负责采购、质检、包装和国际运输。该模式商品丰富、价格竞争力强,能满足个性化需求,但也面临物流成本高、海关政策复杂等挑战。
|
12月前
|
Java 开发者
通义灵码一周年:通义灵码个人版测评
本文介绍了JAVA开发工程师如何利用通义灵码个人版进行源代码分析与优化,包括源代码解释、生成代码优化、workspace和@terminal四个方面的具体操作实例,展示了该工具在提高开发效率上的显著效果,提效达40%。
|
SQL 安全 关系型数据库
MySQL数据库中的增删查改(MySQL最核心,工作中最常用的部分)
MySQL数据库中的增删查改(MySQL最核心,工作中最常用的部分)
1276 0
|
自然语言处理 监控 测试技术
1688代采集运系统搭建:实现采购订单处理自动化
1688代采集运系统为海外买家及跨境电商提供一站式服务, 包括商品采集、订单管理、国内集货与国际运输。系统简化采购流程, 提高效率, 并支持多平台与多语言。通过API接口实时获取商品信息, 自动处理订单与物流, 支持多种支付方式, 便于全球用户使用。系统搭建需注册认证并接入API, 进行测试优化。此系统助力国货全球化。
|
数据库 数据安全/隐私保护
Failed to load resource: the server responded with a status of 404 ()出错的原因是,因为自己调试的时候,设置了与宝塔不一样的数据库
Failed to load resource: the server responded with a status of 404 ()出错的原因是,因为自己调试的时候,设置了与宝塔不一样的数据库