news 2026/4/16 12:19:46

csp信奥赛C++标准模板库STL案例应用9

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
csp信奥赛C++标准模板库STL案例应用9

csp信奥赛C++标准模板库STL案例应用9

map实践

题目背景

出题是一件痛苦的事情!

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

题目描述

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

输入格式

输入共两行。

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

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

输出格式

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

输入输出样例 1
输入 1
4 1 1 1 2 3
输出 1
3
说明/提示

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

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

核心思路

题目要求找出所有满足 A - B = C 的数对(A 和 B 均来自给定数列,且不同位置的相同数字算不同数对)。由于 C ≥ 1,因此 A 和 B 必然不相等(A > B)。
基本思路为:对于每个数字 B,其对应的 A = B + C。统计每个数字出现的次数,然后遍历每个 B,累加对应的 A 出现的次数即可。

算法步骤
  1. 读取输入:读取整数个数 N、差值 C,以及 N 个正整数。
  2. 频率统计:使用map<long long, long long>统计每个数字在数列中出现的次数。
  3. 遍历计算:对于每个数字 B(即数列中的每个元素),计算 A = B + C,若 A 存在于map中,则将其出现次数累加到结果中。
  4. 输出结果:输出最终累加的结果。
时间复杂度与空间复杂度
  • 时间复杂度:O(N log N)。主要开销在于map的插入和查找操作(每次 O(log N)),共进行 2N 次操作(N 次插入和 N 次查找)。
  • 空间复杂度:O(N)。用于存储数组和map
关键点说明
  • 使用map存储数字频率,便于快速查找。
  • 由于 C ≥ 1,A 和 B 不可能相同,因此无需考虑同一元素重复使用的情况。
  • 结果cnt使用long long类型,防止计数溢出(最大数对数量可达 N² 级别)。
  • 查找时使用m.find(t) != m.end()判断是否存在,避免不必要的默认构造。

代码实现

#include<bits/stdc++.h>usingnamespacestd;longlongn,c,a[200010],cnt;// n: 数字个数, c: 差值, a: 存储数列的数组, cnt: 结果计数器map<longlong,longlong>m;// 映射:数字 -> 该数字在数列中出现的次数intmain(){// 读入 n 和 ccin>>n>>c;// 读入数列并统计每个数字的出现次数for(inti=1;i<=n;i++){cin>>a[i];m[a[i]]++;// 对应数字的出现次数加 1}// 遍历每个数字作为 Bfor(inti=1;i<=n;i++){longlongt=a[i]+c;// 计算对应的 A = B + c// 检查 A 是否存在于数列中if(m.find(t)!=m.end()){cnt+=m[t];// 若存在,则累加 A 的出现次数}}// 输出满足条件的数对个数cout<<cnt;return0;}

功能分析

  1. 输入处理:第一行读入 N 和 C,第二行读入 N 个正整数存入数组a,同时用map记录频率。
  2. 频率统计map的键为数字,值为该数字在数列中出现的次数。例如,数列[1,1,2,3]对应的map{1:2, 2:1, 3:1}
  3. 数对计数
    • 对于每个数字 B(如 B=1),计算 A = B + C(如 C=1 时 A=2)。
    • 查找 A 是否在map中(如 A=2 出现 1 次),若存在则将 A 的出现次数累加到cnt
    • 遍历所有 B 后,cnt即为总数对个数。
  4. 输出结果:直接输出cnt

示例验证

以样例为例:

输入: 4 1 1 1 2 3
  • 频率统计:1 出现 2 次,2 出现 1 次,3 出现 1 次。
  • 遍历:
    • B=1, A=2:出现 1 次 → cnt+=1
    • B=1, A=2:出现 1 次 → cnt+=1
    • B=2, A=3:出现 1 次 → cnt+=1
    • B=3, A=4:无对应 → 不加
  • 输出:3

各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}
  • 一、CSP信奥赛C++通关学习视频课:
    • C++语法基础
    • C++语法进阶
    • C++算法
    • C++数据结构
    • CSP信奥赛数学
    • CSP信奥赛STL
  • 二、CSP信奥赛C++竞赛拿奖视频课:
    • 信奥赛csp-j初赛高频考点解析
    • CSP信奥赛C++复赛集训课(12大高频考点专题集训)
  • 三、考级、竞赛刷题题单及题解:
    • GESP C++考级真题题解
    • CSP信奥赛C++初赛及复赛高频考点真题解析
    • CSP信奥赛C++一等奖通关刷题题单及题解

详细内容:

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转


2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

3、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

  • 2025 csp-j 复赛真题及答案解析(最新更新)
  • 2025 csp-x(山东) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(河南) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(辽宁) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(江西) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(广西) 复赛真题及答案解析(最新更新)
  • 2020 ~ 2024 csp 复赛真题题单及题解
  • 2019 ~ 2022 csp-j 初赛高频考点真题分类解析
  • 2021 ~ 2024 csp-s 初赛高频考点解析
  • 2023 ~ 2024 csp-x (山东)初赛真题及答案解析
  • 2024 csp-j 初赛真题及答案解析
  • 2025 csp-j 初赛真题及答案解析(最新更新)
  • 2025 csp-s 初赛真题及答案解析(最新更新)
  • 2025 csp-x (山东)初赛真题及答案解析(最新更新)
  • 2025 csp-x (江西)初赛真题及答案解析(最新更新)
  • 2025 csp-x (辽宁)初赛真题及答案解析(最新更新)

CSP信奥赛C++一等奖通关刷题题单及题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

  • 129 道刷题练习和详细题解,涉及:模拟算法、数学思维、二分算法、 前缀和、差分、深搜、广搜、DP专题、 树和图

4、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 14:32:09

解锁.NET工作流开发:Workflow Core引擎实战指南与性能深度解析

解锁.NET工作流开发&#xff1a;Workflow Core引擎实战指南与性能深度解析 【免费下载链接】workflow-core workflow-core: 一个轻量级的、可嵌入的工作流引擎&#xff0c;针对.NET Standard设计&#xff0c;适用于需要跟踪状态的长期运行过程。 项目地址: https://gitcode.c…

作者头像 李华
网站建设 2026/4/15 12:44:48

ADBKeyBoard虚拟键盘终极指南:解锁Android自动化测试新境界

ADBKeyBoard虚拟键盘终极指南&#xff1a;解锁Android自动化测试新境界 【免费下载链接】ADBKeyBoard Android Virtual Keyboard Input via ADB (Useful for Test Automation) 项目地址: https://gitcode.com/gh_mirrors/ad/ADBKeyBoard ADBKeyBoard作为基于Android Deb…

作者头像 李华
网站建设 2026/4/10 15:35:35

45分钟精通Wiki.js开发:从零搭建到深度调试实战指南

45分钟精通Wiki.js开发&#xff1a;从零搭建到深度调试实战指南 【免费下载链接】wiki- Wiki.js | A modern and powerful wiki app built on Node.js 项目地址: https://gitcode.com/GitHub_Trending/wiki78/wiki- 还在为团队知识库搭建而烦恼吗&#xff1f;想要快速掌…

作者头像 李华
网站建设 2026/4/12 11:05:49

QtScrcpy鼠标点击失效全面修复指南:从问题诊断到完美解决

QtScrcpy鼠标点击失效全面修复指南&#xff1a;从问题诊断到完美解决 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrc…

作者头像 李华
网站建设 2026/4/13 9:57:52

ComfyUI-Ollama进阶指南:打造高效AI创作工作流

ComfyUI-Ollama进阶指南&#xff1a;打造高效AI创作工作流 【免费下载链接】comfyui-ollama 项目地址: https://gitcode.com/gh_mirrors/co/comfyui-ollama 还在为AI创作工作流中的技术门槛而烦恼吗&#xff1f;今天我将带你深入探索ComfyUI-Ollama的强大功能&#xff…

作者头像 李华
网站建设 2026/4/16 10:13:31

Dify可视化界面响应速度优化的四项关键技术

Dify可视化界面响应速度优化的四项关键技术 在构建AI应用的今天&#xff0c;开发者面对的不再是简单的API调用&#xff0c;而是越来越复杂的流程编排、多节点协同与实时调试需求。Dify作为开源LLM应用开发平台&#xff0c;允许用户通过拖拽式界面设计Agent逻辑链、配置RAG系统&…

作者头像 李华