目录
- 前言
- 一、复习语言知识
- 1、代码起手框架
- 2、vector初始化
- 2、unordered_map
- 3、输入输出问题
- 二、复习考试范围知识
- 1、深度优先搜索(Depth-First-Search)模板
- 2、随机字符、数字
- 三、复习比赛真题
- 1、模拟题
- 2、动态规划题
- 四、其他
前言
明天就要开始蓝桥杯了,然鹅还什么都没准备,就挺秃然的,凉凉但是还是要抱一下佛脚。这里分享一下上届蓝桥杯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*5int 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>::iteratorwhile (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-100char 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://blog.csdn.net/qq_40838478/article/details/114664223