蓝桥杯赛前自救攻略,备赛抱佛脚指南

目录

  • 前言
  • 一、复习语言知识
    • 1、代码起手框架
    • 2、vector初始化
    • 2、unordered_map
    • 3、输入输出问题
  • 二、复习考试范围知识
    • 1、深度优先搜索(Depth-First-Search)模板
    • 2、随机字符、数字
  • 三、复习比赛真题
    • 1、模拟题
    • 2、动态规划题
  • 四、其他

前言

明天就要开始蓝桥杯了,然鹅还什么都没准备,就挺秃然的,凉凉但是还是要抱一下佛脚。这里分享一下上届蓝桥杯C++组混子选手的赛前自救笔记!以下是chatGPT的回答

蓝桥杯是国内最具影响力的计算机比赛之一,参赛选手要面对各种难度的编程题目。以下是蓝桥杯比赛前一天备赛的建议:

复习考试范围:蓝桥杯比赛有不同的组别和考试科目,请认真阅读比赛规则和考试范围,并适当调整复习计划。

解决模拟试题:尝试做一些类似于蓝桥杯的模拟试题,这些试题可以帮助您熟悉比赛的形式和难度,提高解题能力。

休息和放松:在比赛前一天,保持良好的身体状态非常重要。请注意充足的睡眠、饮食和运动,并避免过度紧张和焦虑。

熟悉编程环境:请熟悉自己常用的编程语言和开发环境,并进行必要的配置和测试,以确保在比赛时顺利运行程序。

增强信心和决心:蓝桥杯比赛需要很强的耐心和决心,因此在比赛前一天加强自我调整和心理暗示,提高自信和决心。

最后,祝愿所有参加蓝桥杯比赛的选手能够发挥出自己最好的水平,取得优异的成绩!


说的真好,但是我就偏不这么做,以下为个人备战分享经验:

  1. 首先,打编程比赛连语言都不会你打个得er啊,肯定是得去复习语言啊!对于C++选手来说的话就是STL
  2. 其次,各种宝典啊什么手册啊都不如你直接去看官网划的考试范围,然后把每个类型的找例题复习复习知识点。
  3. 最后,直接真题从最新往前推,能推多少是多少,这样一来把编程环境也熟悉了,剩下的看造化了。佛祖保佑!

一、复习语言知识

打编程比赛连语言都不会你打个得er啊,首先肯定是得去复习语言啊!对于C++选手来说的话就是STL

1、代码起手框架

#include 
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   
#include   
#include 
#include   
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::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

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张图片
虽然我承认这个思路确实很妙,而且重要的是学习差分数组以及前缀和的思维,但是不如我解法1来的简单粗暴(嘴硬.jpg)

#include

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

你可能感兴趣的:(蓝桥杯,c++,算法,数据结构,动态规划)