蓝桥杯考前必备知识

有一些知识点几乎必考,它们也是整个算法竞赛知识库的基础。

1)杂题。不需要算法和数据结构,只需要逻辑、推理的题目,难度可难可易。考察思维能力和编码能力,只能通过大量做题来提高。

2BFS搜索和DFS搜索,也就是暴力搜索。这是非常基本的算法,是基础中的基础。

3)动态规划。线性DP,以及一些DP应用,例如状态压缩DP、树形DP等。

4)简单数学和简单数论。  如  最小公倍数、最大公约数

5)简单的字符串处理、输入输出。     

6)基本算法,例如排序、排列、二分、倍增、差分、贪心。

7)基本数据结构。队列、栈、链表、二叉树等。

蓝桥杯题目分为   填空题    和      编程题

注意:  填空题只输出结果,提交过程不得分!!!

语言基础:

        输入输出:   推荐使用scanf / printf       格式化输入输出方便

                正确解决一道题目的前提,是保证接收的数据是正确的。

        接收字符串:

                           1.    char s[10];   scanf("%s",s);   计算长度: len=strlen(s);

                            2.   string s;   cin>>s;    长度:len=s.length();

        排序:  推荐使用库函数sort     头文件#include<algorithm>

                      O(nlogn)            sort(begin,end,cmp);   可以首先cmp函数,请自行了解

        其他常用的函数: max  min

        STL:   可以帮助你更容易地接收和处理数据

                常用的有pair   vector  queue   set   map

                        具体了解函数应用在什么算法中,以及必备的方法

                pair  数对    头文件utility              推荐写法 :typedef pair<int,int> PII;

                vector  有序的容器                   可以用来构建图,方便

                queue  队列                             用在BFS中

                priority_queue                        默认大根堆

                map/set                          去重,常与BFS用做优化。    (BFS+去重, DFS+剪枝)

基础算法:

        时间复杂度

        枚举:   for 枚举所有可能的结果, 使用if可进行优化

                应用:  日期问题,蓝桥杯中常考知识点

        模拟

        进制转换

        前缀和:   用来进行算法优化

                一维前缀和: sum[i]=sum[i-1]+a[i];

                二维前缀和:s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1]

        贪心

        二分:

                整数二分模板        

                        int l,r; 

                        while(l<r){

                                mid=l+r>>1;

                                if(check(mid))   l=mid;

                                else r=mid-1;

 搜索 :   dfs搜all结果      bfs搜最优结果

        dfs:        剪枝优化

                void   dfs(){

                        if()   //收获结果

                        for(){
                               if()   continue;           //剪枝

                                //选择

                               dfs();   //递归

                               //回溯

                        }

                }
        

//    dfs 可以说是必考的,   难点在于如何设置条件,如何进行递归

        bfs:      去重优化

                void  bfs(x){

                        queue<int> q;

                        q.push(x);

                        while(q.size()){

                                int t=q.front();

                                q.pop();

                                //操作...                               

                         }

                }

        经典应用:   八数码问题,从一个状态到另一个状态所需要最短步骤

                map<string,int> mp;   使用mp去重优化     string用来存状态,int存操作步数

                queue<string> q;     //bfs必备队列

                        1 2 3

                        x 4 6         => "123x46758"

                        7 5 8

                int  bfs(s){

                        q.push(s);

                        mp[s]=0;   

                        while(q.size()){

                                string t=q.front();

                                q.pop();

                                if(t==tar) return mp[t];        //找到目标,返回结果

                                int idx= t.find('.');    // 可移动的位置

                                int x=idx/3;   int y=idx%3;   //装换成   

                                int temp=mp[t];    //保存移动次数

                                for(int i=0;i<4;i++){

                                       int  cur=(x+next[i][0])*3+(y+next[i][1]);

                                        swap(t[cur],t[idx]);

                                        if(!mp[t])          mp[t]=temp+1, q.push(t);

                                        swap(t[cur],t[idx]);     //回复状态,进行下一次查找

                         }

                        return -1;

                }

待更   -------------   正在学习的小白,感谢支持

动态规划

数论

基础数据结构:并查集     树上问题 

图论:   存图     图的遍历     图的应用

        

        

        

               

        

  • 21
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值