news 2026/6/10 15:52:19

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

作者头像

张小明

前端开发工程师

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

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

map实践

题目描述

DL 算缘分算得很烦闷,所以常常到体育馆去打保龄球解闷。因为他保龄球已经打了几十年了,所以技术上不成问题,于是他就想玩点新花招。

DL 的视力真的很不错,竟然能够数清楚在他前方十米左右每个位置的瓶子的数量。他突然发现这是一个炫耀自己好视力的借口——他看清远方瓶子的个数后从某个位置发球,这样就能打倒一定数量的瓶子。

  1. ◯ ◯ ◯ \bigcirc \bigcirc \bigcirc

  2. ◯ ◯ ◯ ◯ \bigcirc \bigcirc \bigcirc\ \bigcirc

  3. ◯ \bigcirc

  4. ◯ ◯ \bigcirc\ \bigcirc

如上图,每个 “◯ \bigcirc” 代表一个瓶子。如果 DL 想要打倒3 33个瓶子就在1 11位置发球,想要打倒4 44个瓶子就在2 22位置发球。

现在他想要打倒m mm个瓶子。他告诉你每个位置的瓶子数,请你给他一个发球位置。

输入格式

第一行包含一个正整数n nn,表示位置数。

第二行包含n nn个正整数a i a_iai,表示第i ii个位置的瓶子数,保证各个位置的瓶子数不同。

第三行包含一个正整数Q QQ,表示 DL 发球的次数。

第四行至文件末尾,每行包含一个正整数m mm,表示 DL 需要打倒m mm个瓶子。

输出格式

Q QQ行。每行包含一个整数,第i ii行的整数表示 DL 第i ii次的发球位置。若无解,则输出0 00

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

【数据范围】

对于50 % 50\%50%的数据,1 ≤ n , Q ≤ 1000 , 1 ≤ a i , m ≤ 1 0 5 1 \leq n, Q \leq 1000, 1 \leq a_i, m \leq 10^51n,Q1000,1ai,m105

对于100 % 100\%100%的数据,1 ≤ n , Q ≤ 100000 , 1 ≤ a i , m ≤ 1 0 9 1 \leq n,Q \leq 100000, 1 \leq a_i, m \leq 10^91n,Q100000,1ai,m109

题目分析

这是一个典型的查找问题。题目给出每个位置的瓶子数量,然后需要根据给定的瓶子数量m找到对应的位置。关键点在于:

  1. 每个位置的瓶子数量互不相同
  2. 需要快速回答多个查询
  3. 瓶子数量和查询数量都可能达到10^9级别

代码实现

#include<bits/stdc++.h>usingnamespacestd;intn,q;// n: 位置数, q: 查询次数map<int,int>mp;// 哈希表,用于存储瓶子数量到位置的映射intmain(){// 读取位置数量cin>>n;// 读取每个位置的瓶子数量并建立映射for(inti=1;i<=n;i++){intx;cin>>x;mp[x]=i;// 将瓶子数量x映射到位置i// 注意:由于瓶子数量各不相同,不会出现键冲突}// 读取查询次数cin>>q;// 处理每个查询while(q--){intm;// 想要打倒的瓶子数量cin>>m;// 在哈希表中查找是否有瓶子数量为m的位置autoit=mp.find(m);if(it!=mp.end()){// 找到了,输出对应的位置cout<<it->second<<endl;}else{// 没找到,输出0cout<<0<<endl;}}return0;}

算法思路详解

核心思想

使用哈希表(C++中的map)建立从瓶子数量到位置的映射。由于题目保证各个位置的瓶子数量不同,可以直接用瓶子数量作为键,位置作为值。

时间复杂度分析
  1. 建表阶段:O(n log n),其中n为位置数量
    • map的插入操作时间复杂度为O(log n),共插入n次
  2. 查询阶段:O(q log n),其中q为查询次数
    • 每次查询使用find函数,时间复杂度为O(log n)

总时间复杂度:O((n+q) log n),在题目数据范围(1≤n,Q≤100000)下完全可行。

空间复杂度分析
  • 使用map存储n个键值对,空间复杂度为O(n)
为什么使用map而不是数组?
  1. 瓶子数量m最大可达10^9,无法用数组直接映射
  2. 瓶子数量各不相同,适合使用键值对存储
  3. 需要快速查找,哈希表(或平衡二叉搜索树)是最佳选择

功能分析

输入处理
  1. 读取位置数量n
  2. 读取n个位置的瓶子数量,建立瓶子数量→位置的映射
  3. 读取查询次数q
  4. 依次处理q个查询
查询处理

对于每个查询m:

  1. 在哈希表中查找键为m的条目
  2. 如果找到,输出对应的位置(值)
  3. 如果没找到,输出0
示例解析
输入样例
5 1 2 4 3 5 2 4 7
处理过程
  1. 读取5个位置的瓶子数:[1, 2, 4, 3, 5]
  2. 建立映射:{1→1, 2→2, 4→3, 3→4, 5→5}
  3. 第一个查询m=4:
    • 在映射中找到4→3,输出3
  4. 第二个查询m=7:
    • 在映射中找不到7,输出0
输出结果
3 0

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

#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/6/10 13:59:12

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

csp信奥赛C标准模板库STL案例应用9 map实践 题目背景 出题是一件痛苦的事情&#xff01; 相同的题目看多了也会有审美疲劳&#xff0c;于是我舍弃了大家所熟悉的 AB Problem&#xff0c;改用 A-B 了哈哈&#xff01; 题目描述 给出一串正整数数列以及一个正整数 CCC&#…

作者头像 李华
网站建设 2026/6/10 0:49:50

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

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

作者头像 李华
网站建设 2026/6/10 13:55:05

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/6/10 13:53:53

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/6/10 13:53:22

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

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

作者头像 李华
网站建设 2026/6/10 19:28:25

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

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

作者头像 李华