学习目标:
博主介绍: 27dCnc
专题 : 算法题入门
👍👍👍👍👍👍👍👍👍👍👍👍
☆*: .。. o(≧▽≦)o .。.:*☆
主题: C++ 基础语法
今日份打卡
- 蓝桥杯基础语法
学习内容:
- 小明和完美序列
- 顺子日期
- STL
- 掌握时间管理
内容详细 :
小明和完美序列
题目考点 : STL
map
哈希表
基础语言条件判断
详细思路
运用哈希表去储存出现的次数然后再统计出现次数
最中要的的是情况判断:
1. 如果统计的数字出现次数大于我们数字本身,减去多余部分
2. 小于数字本身 减去所有出现数字
代码 :
#include<bits/stdc++.h>
#define Run 0
#define endl "\n"
#define N 105
using ll = long long;
using namespace std;
void slove() {
int n;cin >> n;
map<int,int>mp;
int a[n + 5];
int ans = 0;
for (int i = 0; i < n; i++) { cin >> a[i]; mp[a[i]]++; }
for (auto& [x,y] : mp) { //x带表当前数字 , y代表当前数字出现的次数
if (y > x) ans += (y - x); //如果当前数字出现次数大于 我们数字 减去多余部分
if (y < x) ans += y; // 如果当前出现次数小于数字 减去我们所有出现数字
}
cout << ans;
}
int main() {
cin.tie(0) -> ios::sync_with_stdio(0);
cout.tie(0) -> ios::sync_with_stdio(0);
#if Run
int _;cin>>_;while(_--) slove();
#else
slove();
#endif
return 0;
}
顺子日期
题目考点 : 模拟
思维
代码
#include<bits/stdc++.h>
using namespace std;
const int Day[] = {31,28,31,30,31,30,31,31,30,31,30,31};
void slove(){
int ans = 0;
for(int month = 1;month<=12;month++){
int a = month / 10,b = month % 10;
for(int day = 1;day <= Day[month-1];day++){
int c = day / 10,d = day % 10;
if(b + 1 == c) {
if(a + 1 == b || c + 1 == d) {
ans++;
}
}
}
}
cout<<ans<<endl;
}
int main(){
int T = 1;
while(T--) slove();
}
注释
STL
pair
pair位于 <utility>
中
pair 包含两种类型 两种类型 可以
不同
用于组成键值对 俩个参数变量fist
和second
pair类还有一些成员函数和特性,例如默认构造函数、节带参数的构造函数、比较运算符重载等
piar实例
以上代码创建了两个pair对象,分别包含不同类型的值。然后,通过访问first和second成员变量,输出了这些值
pair嵌套
pair可以进行嵌套,也就是说可以将一个pair对象作为另一个pair对象的成员通过嵌套pair,你可以方便地组合多个值,并形成更复杂的数据结构。例如,你可以创建一个三维坐标系的点,其中第1个维度由一个整数表示,第2、3个维度由一个pair表示。
pair自带的排序规则
pair自带的排序规则是按照first成员进行升序排序。如果first成员相等,则按照second成员进行升序排序,这意味着当你使用标准库中的排序算法(如std::sort)又对包含pair对象的容器进行排序时会根据pair对象的first成员进行排序。
可以自定义比较函数
vector
vector定义和特性
其中 T 代表类型
template< typename T>
容器大小: vector 是动态数组可以根据需要自动调节容器大小
元素访问 : 可以使用索引访问数组元素 从 0 开始 最后一个元素的索引是 size() - 1 ,用 [] (方括号) 或者 at() 来访问元素
PS : size()返回的的是uint 类型 如果vector为空 - 1 会得到很大的数 越界
一般for循环< size()
而不是<= size() - 1
元素的添加和删除
- 使用
push_back()
在vector的末尾添加元素 , 使用- 使用
pop_back()
在元素末尾删除元素- 使用
insert()
在指定位置插入元素- 使用
erase()
删除指定位置的元素
容器大小管理 :
- 使用
size()
获取 vector 中的元素数量 - 使用
empty()
检查 vector 是否为空 - 使用
resize()
重新定义 vector 大小
迭代器
begin()
end
vector常用函数
注意 : 在 pop_back()
时vector 为非空
vector排序去重
排序
去重
unique() 将重复元素移动到元素末尾
代码示例
运行结果
经典去重语句
numbers.erase(std::unique(numbers.begin(), numbers.end()), numbers.end());
list(双向链表容器)
定义和结构
ist的使用频率不高,在做题时几乎遇不到需要使用list的情景。
list是一种双向链表容器,它是标准模板库(STL)提供的一种序列容器。1ist容器以节点(node)的形式存储元素,并使用指针将这些节点链接在一起,形成一个链表结构。list容器结构如下:
具有双向性 : 有 prev
和 next
内存地址不连续,插入删除元素不导致元素移动
示例
访问查找为
O
(
n
)
O(n)
O(n)
查找为
O
(
1
)
O(1)
O(1)
list常用函数
stack
stack 的定义和结构
stack是一种后进先出(LIFO)的数据结构,使用前需要包含头文件stack提供了一组函数来操作和访问元素,但它的功能相对较简单。stack的定义和结构如下(仅作了解即可):
结构
stack 只能对栈顶元素进行操作
stack 的常用函数
小tips:如果将一个数组的元素依次放入栈,再依次取出,则可以将数组翻转。
代码示例
top() 会获取栈顶元素不弹出元素
queue
与日常生活中的排队类似
prority_queue 优先队列 (堆 理论)
priority_queue与普通队列不同,priority_queue中的元素是按照一定的优先级进行排序的。默认情况下,priority_queue按照元素的值从大到小进行排序,即最大元素位于队列的前面。priorityqueue的定义和结构如下(仅做了解即可)
top()中元素是队列中最大的 (默认大根堆)
小根堆
可以使用 greater
deque 双端队列
俩端都能进能出
常用函数
例题讲解 CLZ 银行问题
题目考点 : 队列
代码
#include <bits/stdc++.h>
#define Run 1
using namespace std;
queue<string> V, N;
void slove()
{
string op;
cin >> op;
if (op == "IN")
{
string name, s;
cin >> name >> s;
if (s == "V")
{
V.push(name);
}
else
{
N.push(name);
}
}
else
{
string s;
cin >> s;
if (s == "V")
V.pop();
else
N.pop();
}
}
template <typename T>
void print(T V)
{
while (V.size())
{
cout << V.front() << "\n";
V.pop();
}
}
int main()
{
cin.tie(0)->sync_with_stdio(0);
cout.tie(0)->sync_with_stdio(0);
#if Run
int _;
cin >> _;
while (_--)
slove();
print(V);
print(N);
#else
slove()
#endif
return 0;
}
set
set 定义
set 内部实现使用红黑树
当插入重复元素set 会自动忽略
常用函数
修改set的方法
multiset 多重集合
与set区别 可以储存重复元素
在重复元素中删除一个元素
st.erase(st.find(x))
unordered_set 无序集合
底层使用哈希表实现
常用函数
find()
返回迭代器
代码示例
set
multiset
unordered_set
map
基础
map 底层使用红黑树实现
map 主要是键值关系
常用函数
count
可以判断元素是否存在
multimap
可以有多个相同的键
常用函数
unordered_map
使用哈希函数
常用操作
学习时间:
- 周一至周五晚上 7 点—晚上9点
- 周六上午 9 点-上午 11 点
- 周日下午 3 点-下午 6 点
学习产出:
- 技术笔记 2 遍
- CSDN 技术博客 3 篇
- 习的 vlog 视频 1 个
🔥如果此文对你有帮助的话,欢迎💗关注、👍点赞、⭐收藏、✍️评论,支持一下博主~