前言
明天就要开始蓝桥杯了,然鹅还什么都没准备,就挺秃然的,凉凉但是还是要抱一下佛脚。这里分享一下上届蓝桥杯C++组混子选手的赛前自救笔记!以下是chatGPT的回答
蓝桥杯是国内最具影响力的计算机比赛之一,参赛选手要面对各种难度的编程题目。以下是蓝桥杯比赛前一天备赛的建议:
复习考试范围:蓝桥杯比赛有不同的组别和考试科目,请认真阅读比赛规则和考试范围,并适当调整复习计划。
解决模拟试题:尝试做一些类似于蓝桥杯的模拟试题,这些试题可以帮助您熟悉比赛的形式和难度,提高解题能力。
休息和放松:在比赛前一天,保持良好的身体状态非常重要。请注意充足的睡眠、饮食和运动,并避免过度紧张和焦虑。
熟悉编程环境:请熟悉自己常用的编程语言和开发环境,并进行必要的配置和测试,以确保在比赛时顺利运行程序。
增强信心和决心:蓝桥杯比赛需要很强的耐心和决心,因此在比赛前一天加强自我调整和心理暗示,提高自信和决心。
最后,祝愿所有参加蓝桥杯比赛的选手能够发挥出自己最好的水平,取得优异的成绩!
说的真好,但是我就偏不这么做,以下为个人备战分享经验:
- 首先,打编程比赛连语言都不会你打个得er啊,肯定是得去复习语言啊!对于C++选手来说的话就是
STL
- 其次,各种宝典啊什么手册啊都不如你直接去看
官网划的考试范围
,然后把每个类型的找例题复习复习知识点。 - 最后,直接
真题
从最新往前推,能推多少是多少,这样一来把编程环境也熟悉了,剩下的看造化了。佛祖保佑!
一、复习语言知识
打编程比赛连语言都不会你打个得er啊,首先肯定是得去复习语言啊!对于C++选手来说的话就是STL
1、代码起手框架
#include <bits/stdc++.h>
using namespace std;
int main(){
return 0;
}
2、vector初始化
vector<vector<int>> matrix(M,vector<int>(N,data)); //初始化为m行,n列,data值
vector<vector<int>> matrix2{ {1},{1,1} };//大括号初始化二维数组
vector<vector<vector<int>>> cube(5, vector<vector<int>>(3, vector<int>(2, 0)));//三维容器初始化为长宽高:2*3*5
int main(){ // 行列不固定初始化二维数组
vector<vector<int>> matrix;//行,列数不固定
cout << "please input rows of matrix: " << endl;
int rows;
cin >> rows;
matrix.resize(rows);
int col;
vector<int> temp;
for (int i = 0; i < rows; i++) {
cout << "please input the cols of " << i << "th row" << endl;
cin >> col;//确定第i行的列数
cout << i << "th row has " << col << " cols," << "please input these" << endl;
for (int j = 0; j < col; j++){
int data;
cin >> data;
temp.push_back(data);
}
matrix[i] = temp;
temp.clear();
}
cout << "output matrix:" << endl;
for (int i = 0; i < matrix.size(); i++) {
for (int j = 0; j < matrix[i].size(); j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
cout << endl;
return 0;
}
- 如果题目在返回空的二维vector时,返回的是 [],这是我们程序中对应用{};
- 如果题目在返回空的二维vector时,返回的是 [[]],这是我们程序中对应用{{}};
2、unordered_map
#include <iostream>
#include <unordered_map>
#include <map>
#include <string>
using namespace std;
int main()
{
//注意:C++11才开始支持括号初始化
unordered_map<int, string> myMap={{ 5, "张大" },{ 6, "李五" }};//使用{}赋值
myMap[2] = "李四"; //使用[ ]进行单个插入,若已存在键值2,则赋值修改,若无则插入。
myMap.insert(pair<int, string>(3, "陈二"));//使用insert和pair插入
//遍历输出+迭代器的使用
auto iter = myMap.begin();//auto自动识别为迭代器类型unordered_map<int,string>::iterator
while (iter!= myMap.end())
{
cout << iter->first << "," << iter->second << endl;
++iter;
}
//查找元素并输出+迭代器的使用
auto iterator = myMap.find(2);//find()返回一个指向2的迭代器
if (iterator != myMap.end())
cout << endl<< iterator->first << "," << iterator->second << endl;
return 0;
}
3、输入输出问题
vector<int> ratings;
int x;
while(cin>>x){
ratings.push_back(x);
if(cin.get()=='\n') break;
}
二、复习考试范围知识
各种宝典啊什么手册啊都不如你直接去看官网划的考试范围
,然后把每个类型的找例题复习复习知识点。
-
计算机算法:
枚举、排序、搜索、计数、贪心、动态规划、图论、数论、博弈论、概率论、计算几何、字符串算法等。
-
数据结构:
数组、对象/结构、字符串、队列、栈、树、图、堆、平衡树/线段树、复杂数据结构*、嵌套数据结构*等。
1、深度优先搜索(Depth-First-Search)模板
void dfs()//参数用来表示状态
{
if(到达终点状态)
{
...//根据需求添加
return;
}
if(越界或者是不合法状态)
return;
if(特殊状态)//剪枝,去除一些不需要访问的场景,不一定i俺家
return ;
for(扩展方式)
{
if(扩展方式所达到状态合法)
{
修改操作;//根据题意来添加
标记;
dfs();
(还原标记);
//是否还原标记根据题意
//如果加上(还原标记)就是 回溯法
}
}
}
2、随机字符、数字
srand((unsigned int )time(0));
rand()%100+1;//1-100
char f[52];
strcpy( f, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
srand((unsigned)time(0));
f[rand()%52];//随机字符
三、复习比赛真题
直接真题
从最新往前推,能推多少是多少,这样一来把编程环境也熟悉了,剩下的看造化了。佛祖保佑!
1、模拟题
小明的彩灯
题目描述
小明拥有 N个彩灯,第 i个彩灯的初始亮度为 ai。
小明将进行 Q 次操作,每次操作可选择一段区间,并使区间内彩灯的亮度 +x(x 可能为负数)。
求 Q次操作后每个彩灯的亮度(若彩灯亮度为负数则输出 0)。
输入描述
第一行包含两个正整数 N,Q分别表示彩灯的数量和操作的次数。
第二行包含 N个整数,表示彩灯的初始亮度。
接下来 Q行每行包含一个操作,格式如下:
l r x,表示将区间 l∼r 的彩灯的亮度 +x。
输出描述
输出共 1行,包含 N个整数,表示每个彩灯的亮度。
例:
输入
5 3
2 2 2 1 5
1 3 3
4 5 5
1 1 -100
输出
0 5 5 6 10
题解代码
解1:普通的模拟思维
#include<iostream>
using namespace std;
int main(){
int N,Q; //N个彩灯,Q次操作
cin>>N>>Q;
long long a[N];//第i个灯的亮度a_i
for (int i = 0;i < N;i++){
cin>>a[i];
}
long long l, r, x;//l-r的区间亮度+x
for (int i = 1;i <= Q;i++){//进行模拟操作
cin>>l>>r>>x;
for(int j = l; j <= r; j++){
a[j-1] += x;
}
}
for (int i = 0;i < N;i++){//按题目要求输出
if (a[i] < 0)
cout<<'0'<<" ";
else
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
解2:利用差分数组求解
虽然我承认这个思路确实很妙,而且重要的是学习差分数组以及前缀和的思维,但是不如我解法1来的简单粗暴(嘴硬.jpg)
#include<iostream>
using namespace std;
typedef long long ll;
int main(){
ll N,Q; //N个彩灯,Q次操作
cin >> N >> Q;
ll a[N+1], b[N+1];//第i个灯的亮度a[i-1],b[n]为差分数组
a[0] = 0; b[0] = 0;
for (int i = 1; i <= N;i++){
cin >> a[i];
}
for (int i = 1; i <= N;i++){ //构建差分数组
b[i] = a[i] - a[i-1];
}
while(Q--){ //模拟操作q次
int l, r, x;//l-r的区间亮度+x
cin >> l >> r >> x;
b[l] += x;
b[r + 1] -= x;
}
for(int i = 1 ; i <= N ; i ++) //计算前缀和,把差分数组b还原成操作q次后的a数组状态
b[i] += b[i - 1];
for(int i = 1 ; i <= N ; i ++)
cout << max(b[i] , 0ll) << " ";//按题目要求输出
return 0;
}
2、动态规划题
可曾听闻蓝桥杯又称动态规划杯?这个是重中之中,可以看看我这篇文章:
简单三步法解决动态规划问题
大数相乘问题
数值溢出问题
输出格式问题
日期题可以直接excel
四、其他
先写到这儿吧,稍后边想到啥边补充吧!文章来源:https://www.toymoban.com/news/detail-785060.html
参考文章如下,侵必删:文章来源地址https://www.toymoban.com/news/detail-785060.html
- https://blog.csdn.net/qq_40838478/article/details/114664223
到了这里,关于蓝桥杯赛前自救攻略,备赛抱佛脚指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!