蓝桥杯刷题总结 + 应赛技巧

当各位小伙伴们看到这篇文章的时候想必蓝桥杯也快开赛了,那么本篇文章博主就来总结一下一些蓝桥杯的应赛技巧,那么依旧先来走个流程

那么接下来我们分成几个板块进行总结

首先是一些基本语法

编程语言的基本语法

首先是数组,在存数据的时候,建议先从1开始存,为啥这么干呢,博主在刷题的过程中有几次因为下标从0开始存,导致最后在理解上出现了一些不必要的麻烦。这里我有必要说一下蓝桥杯第十五届回文数组这题,当时就是因为数据从0开始存导致在理解上绕了好大的弯才想明白。

其次是指针,对于大一的小伙伴们或许还是用当初那个模板——类型 *指针名,不用想这么复杂,直接用数组的下标代替即可,我们需要将指针作为一个思维而非死用模板。

最后是设置类型上,建议各位小伙伴直接使用long long 类型,这样可以避免出现一些数据因为类型范围小而溢出,从而出现一些麻烦

那么接下来就到了编程的技巧板块

填空题技巧

技巧一:巧用excel

参考例子:蓝桥真题讲解-CSDN博客

技巧二:巧用python

其实博主不太推荐技巧二,因为赛场上不一定有pycharm,看情况而定吧

编程技巧

取出一个整数中的某个位的数(个位,十位,百位,千位)

While(条件)
{tmp %= 10;Tmp /= 10;}

这个不建议大家直接当成模板背,建议去理解,而且理解起来也很轻松,当然对于大一只想拿个省奖的同学还是可以考虑记一下的

将某些数存放进哈希表

for(int i = 0; i < n; i++)
{tmp = 数组名[i]hash[tmp] = tmp;
}

经过博主多次考虑决定将之前的模板改成了这个,毕竟是帮助大家,而不是给大家制造麻烦,当然也建议大家先去试试,有问题就在评论区留言,注意哈!这是c++才能用的哦,c语言用了,并且出问题,博主可不背锅哈!

哈希表统计数

举两个例子

非字母的统计

字母的统计

hash[数组名[i] - a]

已经掌握哈希的小伙伴,请忽略这两点

定义变量时的类型

定义变量时用的类型建议直接用long long 类型(即长整型),并且代码中所有变量的类型都保持一致,这样可以避免因超出范围而出现的bug的麻烦

二维数组的坑

二维数组不能开太大,并且vector<vector<int>>类型的也是一样不能开太大,怎么判断自己是否开太大了呢?博主是这么认为的,超过10000的就已经很大了,当然有不同看法的小伙伴欢迎评论区留言,我们可以相互交流一下

数组的创建与传参

一维数组的定义:类型    数组名[ 元素个数 ]     eg.int arr[10];(用这个也ok),最好放在main函数和其他函数的外面(也就是作为全局变量)

二维数组的定义:类型  数组名[ 行 ][  列 ] 

传参:

一维数组:

形参部分:类型 函数名(类型 数组名[数组大小])

实参部分: 函数名(数组名,其他参数)

二维数组:

形参部分:类型 函数名(类型数组名[行][列])其中行可以省略,列不可以省略

实参部分:  函数名(数组名,其他参数)

涉及排序

那么为了避免出现一些不必要的bug,我们可以直接使用sort容器对元素进行排序,那么以下是sort容器的使用模板

sort(数组名【起点位置】, 数组名 + 长度【终点位置】);

sort(数组名【起点位置】, 数组名 + 长度【终点位置】, 函数名);

第二个模板是需要我们自己再写一个函数,并且只要写如何排序即可

举个例子

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
struct node
{int x, y, z;int xw, yw, zw;
}a[N];
bool cmp1(node a, node b)
{return a.xw > b.xw;
}
bool cmp2(node a, node b)
{return a.yw > b.yw;
}
bool cmp3(node a, node b)
{return a.zw > b.zw;
}
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n = 0;cin >> n;for(int i = 1; i <= n; i++) cin >> a[i].x;for(int i = 1; i <= n; i++) cin >> a[i].y;for(int i = 1; i <= n; i++) cin >> a[i].z;for(int i = 1; i <= n; i++){a[i].xw = a[i].x - a[i].y - a[i].z;a[i].yw = a[i].y - a[i].x - a[i].z;a[i].zw = a[i].z - a[i].y - a[i].x;}long long xv = 0, yv = 0, zv = 0, x_ans = 0, y_ans = 0, z_ans = 0;sort(a + 1, a + 1 + n, cmp1);long long i = 1;xv += a[1].xw;while(i <= n && xv > 0){i++;xv += a[i].xw;x_ans++;} sort(a + 1, a + 1 + n, cmp2);i = 1;yv += a[1].yw;while(i <= n && yv > 0){i++;yv += a[i].yw;y_ans++;} sort(a + 1, a + 1 + n, cmp3);i = 1;zv += a[1].zw;while(i <= n && zv > 0){i++;zv += a[i].zw;z_ans++;} if(xv >= 0 && yv >= 0 && zv >= 0) cout << -1;else cout << max(x_ans, max(y_ans, z_ans));return 0;
}

当然仅供参考 

选自蓝桥杯三国游戏

拓展:

如果使用了数据结构,如vector

那么上面的模板就得变成下面的

sort(对象名.begin(), 对象名.end());

sort(对象名.begin(), 对象名.end(), 函数名);

去重容器

定义:set<int,int> 对象名

使用案例(仅供参考)

#include<iostream>
#include<bits/stdc++.h>
#include<string>
using namespace std;
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);set<int> q;string s, s2;cin >> s;while(true){for(int i = 1; i < s.size() - 1; i++){if(s[i] == s[i - 1] && s[i] != s[i + 1]){q.insert(i);q.insert(i + 1);}if(s[i] == s[i + 1] && s[i] != s[i - 1]){q.insert(i);q.insert(i - 1);}}if(q.empty()){cout << s;break;}s2.clear();for(int i = 0; i < s.size(); i++){if(q.find(i) == q.end()) s2 += s[i];}s = s2;q.clear();if(s.size() == 0){cout << "EMPTY";break;}}return 0;
}

选自蓝桥杯消除游戏

数据交换

第一种交换方式

tmp = a;

a = b;

b = tmp;

第二种交换方式

a = a ^ b;

b = a ^ b;

a = a ^ b;

第三种交换方式

swap(a,b);

注意:swap是一个库函数,并且c++才能使用!!!

感觉有思路,但又不确定怎么写

这种情况,我们先不管那些细节问题,如变量声明,循环条件是什么,先写出一个大概,将大概的代码写完后再去补细节

几个经典bug

使用各语言对应的输出语句进行输出某个过程中的数据

案例1

因为少写了什么代码导致最后的结果与预期不同

就比如这题,预期答案是58,但是实际输出是2,那么如何找到这个问题呢

在sum += judge(……)这行代码的后面,编写输出语句,再次执行程序,我们可以发现它还是只输出了2

那么还是给大一的小伙伴说一个知识点:如果是正常的for 按理说是不会只输出一个sum的值(在无特殊情况下),为了让这个bug出现得更明显一点,我们还可以在small[x][y]那段代码后面加输出语句,如下图

那么就可以确定这里是有bug的,那么接下来回到我们一开始的代码原理图上

结合原理图和自己所编写的代码我们可以发现,两层for循环只走了了一次(这里是靠走读代码的技巧,怎么走读下面会讲)原因是少了'=',那么问题来了,为啥会出现二呢?因为下面还有个judge函数,并且我们传过去的参数有数组名和a,b两个变量,进入到judge函数后又会根据我们所写的执行,所以才会出现2

案例2

在本地能通过,在云端通不过

那么出现这种情况,我们可以优先考虑是否出现数组越界的问题,如上图就很明显,条件限制的是i,但对i + 1却没有限制导致出现一个越界,此外i从0开始,导致i - 1越界,因此使得本地能通过,而云端通不过。

案例3

如图所示,这个bug在devc++中表示命名冲突,解决方法:更改一下a和b这两个变量的名字即可

题型模板

动态规划

题型特征

背包问题,路径问题,打家劫舍问题

题型模板

状态表示

状态转移方程

初始化

填表顺序

返回值

前缀和

两个模板

模板一:将动态规划的模板走一遍(即预处理数组),使用数组

模板二:当前项 + 前一项

详情可以前往链接:蓝桥真题讲解-CSDN博客进行观看

差分

核心模板

数组名[l]++;

数组名[r + 1]--;

思路模板:出现差分的地方必有前缀和

 详情可以前往链接:蓝桥真题讲解-CSDN博客进行观看

以上模板优先看

其余模板

滑动窗口

题型特征

能用双指针,就可以考虑是否能用滑动窗口

题型模板

Left = 0, right = 0;

进窗口

判断

出窗口

👆  👇//表示循环

更新结果

二分查找

必记点

当然博主的水平有限,不过对于c组小伙伴们来说基本也就差不多了,如果博主的文章能对其他组的小伙伴有所帮助,博主也是倍感荣幸。

当然赛前这几天这篇文章也还会再更新点内容

最后祝大家旗开得胜!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/77368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP重传率高与传输延迟问题

目录标题 排查步骤&#xff1a;TCP重传率高与传输延迟问题v1.0通过 rate(node_netstat_Tcp_RetransSegs[3m]) 排查 TCP 重传问题的步骤1. **指标含义与初步分析**2. **关联指标排查**3. **定位具体问题源**4. **解决方案**5. **验证与监控** v2.0一、基础检查二、网络层分析三、…

【LeetCode 热题100】73:矩阵置零(详细解析)(Go语言版)

&#x1f680; 力扣热题 73&#xff1a;矩阵置零&#xff08;详解 多种解法&#xff09; &#x1f4cc; 题目描述 给定一个 m x n 的整数矩阵 matrix&#xff0c;如果一个元素为 0&#xff0c;则将其所在行和列的所有元素都设为 0。请你 原地 使用常量空间解决。 &#x1f3a…

组播网络构建:IGMP、PIM 原理及应用实践

IP组播基础 组播基本架构 组播IP地址 一个组播IP地址并不是表示具体的某台主机&#xff0c;而是一组主机的集合&#xff0c;主机声明加入某组播组即标识自己需要接收目的地址为该组播地址的数据IP组播常见模型分为ASM模型和SSM模型ASM&#xff1a;成员接收任意源组播数据&…

Unity UGUI使用手册

概述 UGUI(Unity Graphical User Interface) :Unity 图像用户界面 在游戏开发中&#xff0c;我们经常需要搭建一些图形用户界面。Unity内置的UGUI可以帮助开发者可视化地拼接界面&#xff0c;提高开发效率。UGUI提供不同样式的UI组件&#xff0c;并且封装了对应功能的API&am…

Python web程序在服务器上面部署详细步骤

在服务器上部署Python web程序通常涉及以下步骤&#xff1a; 设置服务器环境: 选择合适的服务器&#xff0c;如AWS EC2、DigitalOcean Droplet等。配置服务器操作系统&#xff0c;例如Ubuntu、CentOS等。安装必要的软件&#xff0c;如Python、pip、git等。 准备Python web程序…

条件生成对抗网络(Conditional GAN, CGAN)原理及实现(pytorch版)

CGAN 原理及实现 一、CGAN 原理1.1 基本概念1.2 与传统GAN的区别1.3 目标函数1.4 损失函数1.5 条件信息的融合方式1.6 与其他GAN变体的对比1.7 CGAN的应用1.8 改进与变体 二、CGAN 实现2.1 导包2.2 数据加载和处理2.3 构建生成器2.4 构建判别器2.5 训练和保存模型2.6 绘制训练损…

Go语言比较递归和循环执行效率

一、概念 1.递归 递归是指一个函数在其定义中直接或间接调用自身的编程方法 。简单来说&#xff0c;就是函数自己调用自己。递归主要用于将复杂的问题分解为较小的、相同类型的子问题&#xff0c;通过不断缩小问题的规模&#xff0c;直到遇到一个最简单、最基础的情况&#x…

keepalived高可用介绍

keepalived 是 Linux 一个轻量级的高可用解决方案&#xff0c;提供了心跳检测和资源接管、检测集群中的系统服务&#xff0c;在集群节点间转移共享IP 地址的所有者等。 工作原理 keepalived 通过 VRRP&#xff08;virtual router redundancy protocol&#xff09;虚拟路由冗余…

数据分享:汽车测评数据

说明&#xff1a;如需数据可以直接到文章最后关注获取。 1.数据背景 Car Evaluation汽车测评数据集是一个经典的机器学习数据集&#xff0c;最初由 Marko Bohanec 和 Blaz Zupan 创建&#xff0c;并在 1997 年发表于论文 "Classifier learning from examples: Common …

NLP简介及其发展历史

自然语言处理&#xff08;Natural Language Processing&#xff0c;简称NLP&#xff09;是人工智能和计算机科学领域中的一个重要分支&#xff0c;致力于实现人与计算机之间自然、高效的语言交流。本文将介绍NLP的基本概念以及其发展历史。 一、什么是自然语言处理&#xff1f…

HOOPS Visualize:跨平台、高性能的三维图形渲染技术解析

在当今数字化时代&#xff0c;三维可视化技术已成为众多行业的核心竞争力。HOOPS Visualize作为一款功能强大的三维图形渲染引擎&#xff0c;凭借其卓越的渲染能力、跨平台支持、丰富的交互功能、高度定制化以及快速部署等特性&#xff0c;为开发人员提供了构建高质量、高性能3…

蓝桥杯速成刷题清单(上)

一、1.排序 - 蓝桥云课 &#xff08;快速排序&#xff09;算法代码&#xff1a; #include <bits/stdc.h> using namespace std; const int N 5e5 10; int a[N];int main() {int n;cin >> n;for (int i 0; i < n; i) {cin >> a[i];}sort(a, a n);for …

Java面试黄金宝典44

1. 查看进程的运行堆栈信息命令 gstack gstack 是 Linux 系统下用于查看指定进程运行时堆栈信息的工具。当程序出现崩溃、死锁或者性能瓶颈等问题时,借助 gstack 可以查看进程中各个线程的调用栈,从而辅助开发人员定位问题。 定义 gstack 本质上是一个封装了底层 ptrace 系统…

嵌入式硬件篇---TOF陀螺仪SPI液晶屏

文章目录 前言1. TOF传感器&#xff08;Time of Flight&#xff09;原理STM32使用方法硬件连接SDASCLVCC\GND 软件配置初始化I2C外设库函数驱动&#xff1a;读取数据 2. 陀螺仪&#xff08;如MPU6050&#xff09;原理STM32使用方法硬件连接SDA/SCLINTVCC/GND 软件配置初始化I2C…

【scikit-learn基础】--『预处理』之 正则化

数据的预处理是数据分析&#xff0c;或者机器学习训练前的重要步骤。 通过数据预处理&#xff0c;可以 提高数据质量&#xff0c;处理数据的缺失值、异常值和重复值等问题&#xff0c;增加数据的准确性和可靠性整合不同数据&#xff0c;数据的来源和结构可能多种多样&#xff…

LeetCode Hot100 刷题笔记(2)—— 子串、普通数组、矩阵

目录 前言 一、子串 1. 和为 K 的子数组 2. 滑动窗口最大值 3. 最小覆盖子串 二、普通数组 4. 最大子数组和 5. 合并区间 6. 轮转数组 7. 除自身以外数组的乘积 8. 缺失的第一个正数 三、矩阵 9. 矩阵置零 10. 螺旋矩阵 11. 旋转图像 12. 搜索二维矩阵 II 前言 一、子串&#…

【Git 常用操作指令指南】

一、初始化与配置 1. 设置全局账户信息 git config --global user.name "用户名" # 设置全局用户名 git config --global user.email "邮箱" # 设置全局邮箱 --global 表示全局生效&#xff0c;若需针对单个仓库配置&#xff0c;可省略该参数 2.…

教培行业创建自己品牌的重要意义——教育培训小程序

在竞争激烈的教培行业&#xff0c;创建自身品牌意义重大。 拥有独特品牌能显著提升机构竞争力与辨识度。如今教培市场同质化严重&#xff0c;一个亮眼的品牌小程序可使机构从众多竞争者中脱颖而出&#xff0c;让学员和家长快速识别并记住。 品牌小程序有助于增强信任度和口碑。…

Docker 介绍 · 安装详细教程

为什么选择 Docker&#xff1f; ✅ 环境一致性 – 告别“在我机器上能跑”的问题&#xff0c;确保开发、测试、生产环境一致。 ✅ 高效轻量 – 秒级启动&#xff0c;资源占用远低于传统虚拟机。 ✅ 跨平台支持 – 可在任何支持 Docker 的环境中运行&#xff0c;包括云服务器、…

GitHub 上开源一个小项目的完整指南

GitHub 上开源一个小项目的完整指南 &#x1f680; 第一步&#xff1a;准备你的项目 在开源之前&#xff0c;确保项目是可用且有一定结构的&#xff1a; ✅ 最低要求 项目文件清晰、结构合理&#xff08;比如&#xff1a;src/、README.md、LICENSE&#xff09;项目能在本地正…