关于蓝桥杯的一些模板c++

1,c++万能头文件

#include<bits/stdc++.h>          //包含所以的常用库

2,关于cin和cout的优化

我们可以知道scanf和printf的速度是快于cin和cout的

是因为cin和cont是需要自行的判断类型,则其速度较慢,

所以我们可以关闭流同步可以提升速度如下

ios::sync_with_stdio(false);

cin.tie(0);

cout.tie(0);

3,关于数组开多大?

全局变量:一定要在main函数外面开数组,全局数组在静态存储区,上限很大;如果在main函数里面开大数组,会导致栈溢出(stack overflow);

计算内存:int a[1000000]大约占用4MB,所以开几个10^6的数组没问题,但10^8就会MLE(内存超限)

4,关于long long 的执念

建议在定义变量的时候不用int,改用long long防止溢出

5,关于浮点数精度

如果题目要求要输出小数,请使用double而非float;

6,要优先理解stl容器

1.vector:动态数组:

vector 本质是一个动态数组,相比普通数组:

  • 无需预先指定固定大小,可根据需要自动扩容
  • 支持随机访问(和数组一样用 [] 访问,时间复杂度 O (1))
  • 尾部增删元素效率高(O (1)),中间增删效率低(O (n))

初始化的几种常见方式(蓝桥杯高频):

// 1.空vector

vector<int> vec1;

//2.初始化n个元素,每个值为val(默认0)

vector<int> vec2(5)  //5个int,值为0;

vector<int> vec3(5,3)   //5个int,值都为3;

//3.用已有数组/vector初始化

int arr[] = {1,2,3,4,5};

vector<int> vec4(arr,arr+5);   //用数组arr的[0,4]初始化

vector<int> vec5(vec4)    //拷贝vec4

//4.c++11初始化

vector<int> vec6 = {1,2,3,4,5};

二、核心操作(蓝桥杯高频)

1. 元素访问

vector<int> vec = {10,20,30,40,50};

//方式1,下标访问(和数组一样)

cout << vec[2] << endl;  //输出30;

//方式2,at()访问(有越界检查,更安全)

cout << vec.at(2) << endl;  //输出30

//方式3:访问首尾元素(高频)

cout << vec.front()<< endl; //首字母

cout << vec.back() << endl; //尾字母

//4.简化写法

for(auto it :vec){

cout << it << " ";

}

//5.迭代器访问(遍历常用)

for(vector<int>::iterator it = vec.begin(); it != vec.end(); it++){

}

2. 增删元素(蓝桥杯核心)

//1.尾部添加元素(push_back,o(1))

vec.push_back(3); //添加3;

//2.尾部删除元素(pop_back,o(1))

vec.pop_back();

//3.插入元素(insert,o(n),中间插入慎用)

vec.insert(vec.begin() + 1,9);//在索引1的元素插入9

vec.insert(vec.end(),8)//在尾部插入8

//4.删除元素(erase,o(n))

vec.erase(vec.begin()+1);//删除索引1的元素

vec.erase(vec.begin(),vec.end()); //删除所有元素

//5.清空vector(两种方式)

vec.clear(0=); //清空元素,容量不变

vec.resize(0); //清空元素,容量可能变化

3. 容量与大小(必掌握)

vector<int> vec(5,2); //初始化为5个2

//size():元素个数

cout << vec.size() << endl; //输出5;

 // capacity():当前容量(分配的内存能容纳的元素数)

cout << vec.capacity() << endl; // 输出5

// empty():判断是否为空(高频)

if(vec.empty()) { cout << "空" << endl; } else { cout << "非空" << endl; }

// resize():调整元素个数

vec.resize(8); // 扩容到8个元素,新增的3个为0

vec.resize(3); // 缩容到3个元素,删除后面的5个

三、蓝桥杯实战技巧

1. 排序(高频考点)

vector 结合 sort 函数是蓝桥杯排序题的标配:

// 升序排序(默认)

sort(vec.begin(), vec.end()); // vec: [1,2,5,5,6,9]

// 降序排序

sort(vec.begin(), vec.end(), greater<int>()); // vec: [9,6,5,5,2,1]

// 自定义排序(比如按绝对值)

sort(vec.begin(), vec.end(), [](int a, int b) { return abs(a) < abs(b); });

2. 去重(高频)

vector<int> vec = {1,2,2,3,3,3,4};

//去除步骤:先排序 ——> 在去重

sort(vec.begin(),vec.end());

// unique把重复元素移到末尾,返回不重复部分的尾迭代器

auto it = unique(vec.begin(), vec.end());

vec.erase(it, vec.end()); // 删除重复部分,vec: [1,2,3,4]

4. 性能优化(蓝桥杯大数据场景)
  • reserve() 预分配容量,避免频繁扩容(比如已知数据量是 1e5,提前 vec.reserve(1e5)
  • 尾部操作(push_back/pop_back)效率远高于中间操作(insert/erase
  • 清空时如果需要复用 vector,用 vec.clear() 比重新定义更高效
  • 二维 vector 初始化vector<vector<int>> vec(n) 是 n 行空 vector,不是 n 行 m 列,需注意
  • 容量和大小混淆size() 是元素个数,capacity() 是内存容量,resize() 改 size,reserve() 改 capacity。

关于set和multiset的用法

set:有序,无重复的集合

multiset:有序,允许重复的集合

共同点:
内部自动排序(默认从小到大)
插入、删除、查找都是 O(log n)
不能像数组那样用 [] 随机访问,必须用迭代

set 最常用操作(竞赛高频)

1. 定义 & 插入

set<int> s;

s.insert(3);
s.insert(1);
s.insert(2);
s.insert(3);  // 重复,set 会自动忽略

现在里面是:1 2 3

2. 遍历

for(auto x: s){

cout << x << " ";

}

3.查找元素

auto it = s.find(2);

if(it != s.end(()){

cout << "找到了: " << *it << endl;

4. 删除元素

s.erase(2);  // 按值删

s.erase(s.begin());   // 按迭代器删

四、multiset(允许重复)
用法和 set 几乎一模一样,唯一区别:
可以存重复数字。

multiset<int> ms;

ms.insert(2);

ms.insert(2);

ms.insert(3);

里面是:2 2 3

删除注意(超级重要!蓝桥杯常错)

  • ms.erase(2)删除所有 2
  • ms.erase(ms.find(2))只删一个 2

五、set /multiset 最强功能:找前驱后继

这是它们在蓝桥杯里最值钱的地方!

1. 找 ≥ x 的最小数(lower_bound)

cpp

运行

auto it = s.lower_bound(x); 

2. 找 > x 的最小数(upper_bound)

cpp

运行

auto it = s.upper_bound(x); 

3. 找最大的数(最后一个元素)

cpp

运行

auto it = s.end(); --it; cout << *it << endl; 

4. 找最小的数

cpp

运行

*s.begin()

关于map核心特点是「键(key)- 值(value)」成对存储,且键唯一、自动按键升序排序,插入 / 查找 / 删除的时间复杂度都是 O (log n)。在蓝桥杯中,它最适合解决需要「映射关系」的问题,比如统计次数、字符 / 数字映射、缓存数据等。

map 的定义格式:map<键类型, 值类型> 容器名,键和值可以是任意可比较的类型(int、string、char 等):

// 1. 基础定义:int键,int值

map<int,int>mp1;

// 2. 字符串键,int值(统计字符/单词次数高频)

map<string,int> mp2;

// 3. int键,vector值(复杂映射场景)

map<int,vector<int>> mp3;

2. 初始化(蓝桥杯常用方式)

// 方式1:空map,后续插入
map<int, string> mp;

// 方式2:C++11初始化(编译器支持)
map<int, string> mp = {{1, "apple"}, {2, "banana"}, {3, "orange"}};

Read more

RTX50系显卡+CUDA+torch+python对应关系

RTX50系显卡+CUDA+torch+python对应关系

前言 本人的显卡是RTX5070,使用时发现它对CUDA、torch和python版本有要求,试图按照老项目的依赖文件进行安装发现安不了,因此记录一下(截至2025年6月)。 提示:以下是本篇文章正文内容,下面案例可供参考 一、RTX50系显卡只能使用CUDA12.8 二、目前只支持torch2.7.0和2.7.1 1.去pytorch官网的https://download.pytorch.org/whl/torch/看一下,确实只有2.7.0和2.7.1有对应cuda12.8的。 注:此图中包含了所有对应CUDA12.8的whl文件,可根据操作系统和python版本选择 torch2.7.1及对应torchvision torchaudio安装指令: pip3 install torch torchvision torchaudio --index-url https://download.pytorch.

By Ne0inhk
抽奖系统Selenium自动化测试流程解析

抽奖系统Selenium自动化测试流程解析

🌈感谢大家的阅读、点赞、收藏和关注  💕希望大家喜欢我本次的讲解💕 目录👑 一、自动化测试环境与框架核心配置🌟 1. 技术栈与依赖(测试文档 - 环境配置章节) 2. 浏览器驱动初始化(测试文档 - 基础工具章节) 二、核心工具类(测试文档 - 通用工具章节)❄️ 1. 测试数据自动生成(解决测试数据重复问题) 2. 自动化截图(测试失败溯源) 三、核心业务模块测试逻辑(测试文档 - 功能测试章节)🍃 1. 登录 / 注册模块(边界值 + 异常场景全覆盖) 2. 管理员核心模块(iframe 切换 + 多场景校验) 3. 测试执行入口(全流程自动化) 四、关键技术难点与解决方案(测试文档 -

By Ne0inhk
【小技巧】PyCharm建立项目,VScode+CodeX+WindowsPowerShell开发Python pyQT6

【小技巧】PyCharm建立项目,VScode+CodeX+WindowsPowerShell开发Python pyQT6

运行程序后,窗口如图;但是闪退。报错如下。C:\Users\CQJY\Desktop\PythonProject.venv\Scripts\python.exe C:\Users\CQJY\Desktop\PythonProject\main.py 进程已结束,退出代码为 -1073740791 (0xC0000409) 现在这个新报错: 程序“python.exe”无法运行: 指定的可执行文件不是此操作系统平台的有效应用程序。 几乎可以肯定是 .venv\Scripts\python.exe 被破坏/替换(或和基准 Python 不一致)。之前它还能跑、能弹 “Qt ok”,说明不是系统位数问题,而是后来 venv 里的 python.exe

By Ne0inhk

【Python】6 种方法轻松将 Python 脚本打包成 EXE 应用

引言 Python 凭借其简洁的语法和强大的功能,在数据分析、Web 开发、自动化脚本等领域广受欢迎。它“开箱即用”的特性让开发者能够快速构建原型和应用程序。然而,对于最终用户而言,运行 Python 脚本往往意味着需要预先安装 Python 解释器及相关依赖库,这对非技术背景的用户来说无疑增加了门槛。 为了解决这一问题,将 Python 代码打包成独立的可执行文件(通常在 Windows 上是 .exe 文件)成为了一个非常实用的选择。这样,用户无需任何额外环境配置,就能像运行普通软件一样直接启动您的 Python 应用。本文将为您介绍六种主流且有效的 Python 打包工具,助您轻松实现跨平台分发。 1. PyInstaller: 最流行的选择 PyInstaller 是目前最广为人知、社区支持最广泛的 Python 打包工具之一。它能够很好地处理各种复杂的依赖关系,并支持将整个应用及其所需资源打包成一个或多个独立的可执行文件。 * 特点: * 支持 Windows,

By Ne0inhk