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

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

binary_search实践

题目描述

虽然 Miss Medusa 到了北京,领了科技创新奖,但是她还是觉得不满意。原因是:她发现很多人都和她一样获了科技创新奖,特别是其中的某些人,还获得了另一个奖项------特殊贡献奖。而越多的人获得了两个奖项,Miss Medusa 就会越眼红。于是她决定统计有哪些人获得了两个奖项,来知道自己有多眼红。

输入格式

第一行两个整数 n , m n, m n,m,表示有 n n n 个人获得科技创新奖, m m m 个人获得特殊贡献奖。

第二行 n n n 个正整数,表示获得科技创新奖的人的编号。

第三行 m m m 个正整数,表示获得特殊贡献奖的人的编号。

输出格式

输出一行,为获得两个奖项的人的编号,按在科技创新奖获奖名单中的先后次序输出。

输入输出样例 1
输入 1
复制代码
4 3
2 15 6 8
8 9 2
输出 1
复制代码
2 8
说明/提示

对于 60 % 60\% 60% 的数据, 0 ≤ n , m ≤ 1000 0 \leq n, m \leq 1000 0≤n,m≤1000,获得奖项的人的编号 < 2 × 1 0 9 \lt 2 \times 10^9 <2×109;

对于 100 % 100\% 100% 的数据, 0 ≤ n , m ≤ 1 0 5 0 \leq n, m \leq 10^5 0≤n,m≤105,获得奖项的人的编号 < 2 × 1 0 9 \lt 2 \times 10^9 <2×109。

输入数据保证第二行任意两个数不同,第三行任意两个数不同。

题目分析

问题理解:本题要求找出同时获得科技创新奖和特殊贡献奖的人,并按照科技创新奖名单中的先后顺序输出这些人的编号。

核心思路

  1. 科技创新奖名单的顺序必须保持,不能打乱
  2. 特殊贡献奖名单可以用来快速判断某个人是否也获得了该奖项
  3. 需要对科技创新奖名单中的每个人,检查是否在特殊贡献奖名单中

算法选择分析

  • 直接暴力查找(O(n×m))会超时,因为n和m最大可达10^5
  • 使用排序+二分查找的方法,时间复杂度为O(m log m + n log m)

代码实现

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

const int N=1e5+10;  // 定义数组大小,满足题目最大数据范围
int n,m,a[N],b[N];   // a[]存储科技创新奖名单,b[]存储特殊贡献奖名单

int main(){
    cin>>n>>m;
    
    // 读入科技创新奖名单(保持原始顺序)
    for(int i=1;i<=n;i++) cin>>a[i];
    
    // 读入特殊贡献奖名单
    for(int i=1;i<=m;i++) cin>>b[i];
    
    // 对特殊贡献奖名单进行排序,为二分查找做准备
    // 排序后b[1]到b[m]按升序排列
    sort(b+1,b+m+1);
    
    // 遍历科技创新奖名单中的每个人
    for(int i=1;i<=n;i++){
        // 在排序后的特殊贡献奖名单中二分查找a[i]
        // binary_search返回布尔值,表示是否找到
        bool found=binary_search(b+1,b+m+1,a[i]);
        
        // 如果找到,说明该人同时获得两个奖项
        if(found) cout<<a[i]<<" ";
    }
    
    return 0;
}

功能分析

优点:
  1. 时间复杂度合理:O(m log m + n log m) ≈ O(10^5 log 10^5),可以在1秒内完成
  2. 保持顺序:按照科技创新奖名单的原始顺序输出,满足题目要求
  3. 空间效率:只使用了两个数组,空间复杂度O(n+m)
时间复杂度分析:
  • 排序特殊贡献奖名单:O(m log m)
  • n次二分查找:O(n log m)
  • 总复杂度:O((n+m) log m) ≈ 10^5 × 17 = 1.7×10^6次操作,非常高效
空间复杂度分析:
  • 两个数组:O(n+m) = O(2×10^5) ≈ 800KB,非常小
边界情况处理:
  • n=0或m=0时,程序也能正确处理
  • 所有编号都不同,不需要考虑重复问题
  • 使用binary_search时,b数组必须先排序

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

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"##########  一站式掌握信奥赛知识!  ##########";
	cout<<"#############  冲刺信奥赛拿奖!  #############";
	cout<<"######  课程购买后永久学习,不受限制!   ######";
	return 0;
}
  • 一、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 点击跳转

· 文末祝福 ·

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"跟着王老师一起学习信奥赛C++";
	cout<<"    成就更好的自己!       ";
	cout<<"  csp信奥赛一等奖属于你!   ";
	return 0;
}
相关推荐
NAGNIP2 小时前
Kimi Linear——有望替代全注意力的全新注意力架构
算法·面试
智驱力人工智能2 小时前
无人机河道漂浮物检测 从项目构建到价值闭环的系统工程 无人机河道垃圾识别 农村河道漂浮物智能清理方案 无人机辅助河道清洁预警
opencv·算法·安全·yolo·目标检测·无人机·边缘计算
德福危险3 小时前
C语言数据类型与变量 系统总结笔记
c语言·笔记·算法
@淡 定3 小时前
JVM调优参数配置详解
java·jvm·算法
moonquakeTT3 小时前
C++:智能指针
开发语言·c++
Lenyiin3 小时前
第 97 场周赛:公平的糖果交换、查找和替换模式、根据前序和后序遍历构造二叉树、子序列宽度之和
java·c++·python·leetcode·周赛·lenyiin
CoovallyAIHub3 小时前
从电影特效到体育科学,运动追踪只能靠“人眼”吗?
深度学习·算法·计算机视觉
风筝在晴天搁浅3 小时前
hot100 48.旋转图像
算法
Clarence Liu3 小时前
MacOS 在Trae IDE中构建现代C++开发环境:从新手到高效的完整指南
c++·ide·macos