本篇主要是对于蓝桥杯中的基础题型,以及为什么蓝桥杯又会被叫做暴力杯的解释。
一、排序
排序算法几乎是必考的,但是每种排序的时间复杂度不同,如果遇到了,最好是能够熟练掌握一种快速的排序方法,如果是c++,则可以直接调用sort函数,具体是啥头文件我忘了,因为我一般直接用万能头文件#include <bits/stdc++.h>,如果是c语言,则没有sort函数,此时就需要使用快排,模板如下
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
const int N=1e7+2;
const int mod=1000000007;
using namespace std;
int a[N];
void quick(int l,int r){
if(l>=r) return;
int i=l,q=r,mid=(l+r)/2;
while(i<=q){
while(a[i]<a[mid]) i++;
while(a[q]>a[mid]) q--;
if(i<=q){
swap(a[i],a[q]);
i++;
q--;
}
}
quick(l,q);
quick(i,r);
}
int main(){
for(int i=1;i<=5;i++){
scanf("%d",&a[i]);
}
quick(1,5);
for(int i=1;i<=5;i++) printf("%d ",a[i]);
return 0;
}
这个模板我认为是较为容易背的,如果记不住的话可以使用冒泡排序,具体如下
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
const int N=1e7+2;
const int mod=1000000007;
using namespace std;
int a[N];
int main(){
for(int i=1;i<=5;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=5;i++){
for(int q=1;q<=5-i;q++){
if(a[q]>a[q+1]){
int t=a[q];
a[q]=a[q+1];
a[q+1]=t;
}
}
}
for(int i=1;i<=5;i++) printf("%d ",a[i]);
return 0;
}
但是时间复杂度为O(n^2),往往容易造成超时问题,也就会造成这道题的大体思路明了,但是因为排序超时,多少有点可惜。
二、数据结构
蓝桥杯对于数据结构的考查也是有的,如果说在考场上写一个模板多少有点困难,而且本末倒置,如果是c++,则可以直接调用stl库中的数据结构,而如果是c语言,则建议用数组进行模拟,具体如下
int q[N],ff,tt;//模拟队列
void push(int x){
q[++tt]=x;
}
void pop(){
q[ff++];
}
int s[N],tt;//模拟栈
void push(int x){
s[++tt]=x;
}
void pop(){
s[tt--];
}
int e[N],ne[N],idx,head;//模拟单链表
void inf(){//初始化单链表
idx=0;
head=-1;
}
void insert(int x){//头插
e[idx]=x;
ne[idx]=head;
head=idx++;
}
void de(int x){//删除x
for(int i=head;i!=-1;i=ne[i]){
if(e[ne[i]]==x){
ne[i]=ne[ne[i]];
break;
}
}
}
三、数字转置(对称数字)
蓝桥杯常考的一个知识点,往往都是送分题,例如求对称年月日,比如20211202,2021年12月2日就是一个对称的,通常都有一种简单的方法,且不用栈,具体如下
int zhuan(int x){
int w=0;
while(x){
w*=10;
w+=x%10;
x/=10;
}
return w;
}
四、骗分宝典
由于是oi赛制,所以就算不会也不要空题,起码把样例对拍一下,也就是说用if判断读入数据,然后进行输出,如果运气好,说不定能有一分,而且建议学习一下dfs,可以用来暴力搜索得答案,这也就是蓝桥杯叫暴力杯的原因之一,同时也是容易获奖的另外的原因。
最后不建议做完填空就走,起码做一两道编程大题,因为首先,填空题不能骗分,对就是对,错就是错,而且填空题的难度不见得很低,有一年填空题就考了一个最短路和最大公因数的结合版,这就算是比较麻烦的一种了。而且一道填空一般五分,一道编程大题十分起步一般,两道填空全对才顶一个大题,而且大题也不见得都很难。有一些省一,比较厉害的,有人会只做后三道大题,因为全对的话就是稳省一,所以还是说重视一下编程。