csp信奥赛C++标准模板库STL案例应用5
set实践
题目描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N NN个1 11到1000 10001000之间的随机整数( N ≤ 100 ) (N\leq100)(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入格式
输入有两行,第1 11行为1 11个正整数,表示所生成的随机数的个数N NN。
第2 22行有N NN个用空格隔开的正整数,为所产生的随机数。
输出格式
输出也是两行,第1 11行为1 11个正整数M MM,表示不相同的随机数的个数。
第2 22行为M MM个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
输入输出样例 1
输入 1
10 20 40 32 67 40 20 89 300 400 15输出 1
8 15 20 32 40 67 89 300 400题目分析
问题核心:对给定的一串数字进行去重和排序操作
输入处理:
- 第一行:数字个数 N (≤100)
- 第二行:N个1-1000之间的整数
输出要求:
- 第一行:去重后的数字个数 M
- 第二行:按升序排列的去重结果
关键点:
- 数据范围小(N≤100,数值≤1000)
- 需要同时完成去重和排序
代码实现
#include<bits/stdc++.h>// 包含所有标准库头文件(竞赛常用写法)usingnamespacestd;// 使用标准命名空间intn;// 存储随机数的个数set<int>s;// 使用set容器,自动去重并排序intmain(){// 输入随机数个数cin>>n;// 循环读取n个随机数并插入setfor(inti=1;i<=n;i++){intx;// 临时存储每个随机数cin>>x;// 读取一个随机数s.insert(x);// 插入set(自动去重和排序)}// 输出去重后的数字个数(set的大小)cout<<s.size()<<endl;// 遍历set并输出所有元素for(autoit=s.begin();it!=s.end();it++){cout<<*it<<" ";// 输出当前元素和空格}return0;// 程序正常结束}功能分析
核心功能实现
- 去重功能:通过
set<int>自动去除重复元素 - 排序功能:
set内部使用红黑树实现,元素自动按升序排列
算法特点
- 时间复杂度:O(N log N)
- 每个插入操作 O(log N)
- N次插入共 O(N log N)
- 空间复杂度:O(M),M为去重后的元素个数
代码优势
- 简洁高效:利用STL容器简化代码
- 逻辑清晰:去重和排序由容器自动完成
- 输出正确:格式完全符合题目要求
其他实现方案对比
- 排序+去重:先排序,再用unique算法去重
- 桶排序:利用数值范围小的特点(1-1000)
- 哈希集合:使用unordered_set,再单独排序
适用场景
- 本题数据规模小,多种方法均可
set方案代码最简洁,最适合竞赛快速解题- 如果数据规模更大(如N>10^5),需要考虑更高效的算法
各种学习资料,助力大家一站式学习和提升!!!
#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;}