蓝桥杯重点(C/C++)(随时更新,更新时间:2023.1.27)

news2024/11/26 23:40:24

点关注不迷路,欢迎推荐给更多人

目录

1  技巧

1.1  取消同步(节约时间,甚至能多骗点分,最好每个程序都写上)

1.2  万能库(可能会耽误编译时间,但是省脑子)

1.3  蓝桥杯return 0千万别忘了写!!

1.4  编译设置(Dev C++)

1.5  memset填充函数

1.6  时间复杂度

1.6.1  常数阶  O(1)

1.6.2  对数阶  O(logn)

1.6.3  线性阶  O(n)

1.6.4  线性对数阶  O(nlogn)

1.6.5  多重循环  O(n^k)

1.7  剪枝

1.8  find函数

1.9 PI问题

1.10  C/C++帮助文档

2  基本算法及技巧

2.1  BFS(宽度优先搜索)

2.2  DFS(深度优先搜索)

2.3  最大公约数和最小公倍数

2.4  进制转换+超大数据处理

2.4.1  十进制为媒介(常用型)

2.4.2  二进制为媒介(技巧型)(含超大数据处理)

2.5  二进制表示法

2.6  背包问题

2.6.1  01背包问题

2.6.2  多重背包问题(每种物品有多件)

2.6.3  完全背包问题(每种物品有无数件)

2.7  动态规划(DP)

2.8  贪心

2.9  分治(以后更新)

2.10  数字分拆到数组中

2.11  数字和字符串的互化

2.12  排序

2.13  冒泡排序法和二分查找法(最常用)

2.14  图论

2.15  常用树

2.16  二次幂算法

3  STL

3.1  队列(queue)

3.2  链表(list) 

 3.3  优先队列(priority queue)

3.4  向量/动态数组(vector)

 3.5  栈(stack)

3.6  集合(set) (要求没有重复元素)

 3.7  集合/映射/键值对(map)

3.8  迭代器


1  技巧

1.1  取消同步(节约时间,甚至能多骗点分,最好每个程序都写上)

ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

1.2  万能库(可能会耽误编译时间,但是省脑子)

#include <bits/stdc++.h>

1.3  蓝桥杯return 0千万别忘了写!!

1.4  编译设置(Dev C++)

(1)工具->编译选项->编译器->编译时加入以下命令->调成C99

 (2)工具->编译选项->代码生成/优化->代码生成->语言标准

1.5  memset填充函数

按照字节对内存块进行初始化,注意只能填充0或-1

#include <bits/stdc++.h>
using namespace std;
int a[10];
int main()
{
	memset(a,-1,sizeof(a));
	for(int i=0;i<10;i++)
	{
		cout<<a[i]<<endl;
	}
	return 0;
}

1.6  时间复杂度

蓝桥杯每一道题编译时间都限制在1s以内,遇到数据比较大的题目,往往需要降低时间复杂度。

粗略估计,O(n)情况下一秒大概完成4亿次,O(n*n)情况下一秒大概完成2万次,O(n*n*n)情况下大概完成700次。

由于蓝桥杯评测系统是根据通过样例数来评分,所以我们做题时一定要注意约定样例取值范围。

例题:K倍区间(暴力法只能通过部分样例,所以要用更好的算法)

(1条消息) K倍区间(蓝桥杯2017年第八届省赛B组第十题)(C/C++)_菜只因C的博客-CSDN博客https://blog.csdn.net/m0_71934846/article/details/128434135?spm=1001.2014.3001.5501

1.6.1  常数阶  O(1)

int i=1;
int j=2;
int m=i+j;

1.6.2  对数阶  O(logn)

int i=1;
while(i<n)
{
  i=i*2;
}

1.6.3  线性阶  O(n)

for(int i=0;i<n;i++)
{
  cout<<i<<endl;
)

1.6.4  线性对数阶  O(nlogn)

for(int m=1;m<n;m++)
{
  int i=1;
  while(i<n)
  {
    i=i*2;
  }
}

1.6.5  多重循环  O(n^k)

k为循环层数

1.7  剪枝

做题时已经发现的不可能取到的数值,就不要再让计算机算了,尽量节省时间,蓝桥杯中目前遇到的还没有用到过过于繁琐的剪枝,大多也是在BFS和DFS中出现(bool vis)

1.8  find函数

函数作用:查找该元素在数组中第一次出现的位置的地址(类似于0x的地址)

模型:find(查找起点,查找终点,查找目标元素)

同样,查找区间为[查找起点,查找终点)

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int a[10]={2,6,8,1,3,7,5,1,0,11};
	cout<<find(a+0,a+5,8)<<endl;//打印类似0x地址 
	cout<<find(a+0,a+5,8)-a<<endl;//打印数组【】内的序号 
	return 0;
}

1.9 PI问题

PI=atan(1.0)*4

1.10  C/C++帮助文档

2  基本算法及技巧

2.1  BFS(宽度优先搜索)

用到队列(有时会用到优先队列)

主要思想:把所有符合条件的点都压入队列,然后挨个元素弹出上下左右前后搜索,直到队列清空时代表搜索完毕,搜索的时候注意判断是否已经搜索过,用bool vis【】判断。

例题:全球变暖

(1条消息) 全球变暖(蓝桥杯2018年省赛B组试题I)(C/C++)_菜只因C的博客-CSDN博客https://blog.csdn.net/m0_71934846/article/details/128434254?spm=1001.2014.3001.5502

2.2  DFS(深度优先搜索)

用到递归(不好理解)

主要模板:可参见如下全排列例题

http://t.csdn.cn/ANnS1

总结起来有如下几步:

(1)确定 边界    if()return;

(2)进入for循环

(3)判断是否搜索过  if(vis[])vis[]=true; dfs();  vis[]=false;

例题1:凑算式

(3条消息) 凑算式(蓝桥杯2016年省赛B组第三题)(C/C++)_菜只因C的博客-CSDN博客https://blog.csdn.net/m0_71934846/article/details/128434004?spm=1001.2014.3001.5502

例题2:2n皇后问题

2n皇后问题(蓝桥杯基础练习C/C++)_菜只因C的博客-CSDN博客icon-default.png?t=MBR7https://blog.csdn.net/m0_71934846/article/details/128772257?spm=1001.2014.3001.5501

2.3  最大公约数和最小公倍数

最大公约数(greatest common divisor,gcd)

#include <bits/stdc++.h>
using namespace std;

int main()
{
	cout<<__gcd(25,5);
	return 0;
}

最小公倍数 (least common multiple,lcm)

多写一个lcm函数

#include <bits/stdc++.h>
using namespace std;

int lcm(int a,int b)
{
    return a*b/__gcd(a,b);
}
int main()
{
	cout<<lcm(25,5);
	return 0;
}

2.4  进制转换+超大数据处理

2.4.1  十进制为媒介(常用型)

(8条消息) 任意进制转换成十进制/十进制转换成任意进制(ASCII码法)(C/C++)_菜只因C的博客-CSDN博客https://blog.csdn.net/m0_71934846/article/details/128297645?spm=1001.2014.3001.5502

2.4.2  二进制为媒介(技巧型)(含超大数据处理)

十六进制转八进制+超大数据处理(蓝桥杯基础练习C/C++)_菜只因C的博客-CSDN博客十六进制转八进制+超大数据处理(蓝桥杯基础练习C/C++)https://blog.csdn.net/m0_71934846/article/details/128745875?spm=1001.2014.3001.5502

2.5  二进制表示法

例题:无聊的逗

(8条消息) 蓝桥杯试题 算法训练 无聊的逗(C/C++)_菜只因C的博客-CSDN博客https://blog.csdn.net/m0_71934846/article/details/128717938?spm=1001.2014.3001.5502

2.6  背包问题

2.6.1  01背包问题

#include<bits/stdc++.h>

using namespace std;

int v[1000];    // 体积
int w[1000];    // 价值 
int f[1000][1000];  // f[i][j], j体积下前i个物品的最大价值 

int main() 
{
    int n, m;   
    cin >> n >> m;
    for(int i = 1; i <= n; i++) 
        cin >> v[i] >> w[i];

    for(int i = 1; i <= n; i++) 
        for(int j = 1; j <= m; j++)
        {
            //  当前背包容量装不进第i个物品,则价值等于前i-1个物品
            if(j < v[i]) 
                f[i][j] = f[i - 1][j];
            // 能装,需进行决策是否选择第i个物品
            else    
                f[i][j] = max(f[i - 1][j], f[i - 1][j - v[i]] + w[i]);
        }           

    cout << f[n][m] << endl;

    return 0;
}

2.6.2  多重背包问题(每种物品有多件)

把多件物品捏合成一件新的物品,按序号往后叠加即可

2.6.3  完全背包问题(每种物品有无数件)

#include<iostream>
using namespace std;
const int N = 1010;
int f[N];
int v[N],w[N];
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i = 1 ; i <= n ;i ++)
    {
        cin>>v[i]>>w[i];
    }
 
    for(int i = 1 ; i<=n ;i++)
    for(int j = v[i] ; j<=m ;j++)
    {
            f[j] = max(f[j],f[j-v[i]]+w[i]);
    }
    cout<<f[m]<<endl;
}

2.7  动态规划(DP)

例题1:拿金币

(1条消息) 拿金币(蓝桥杯算法训练)(C/C++)_菜只因C的博客-CSDN博客https://blog.csdn.net/m0_71934846/article/details/128456365?spm=1001.2014.3001.5502

例题2:包子凑数

包子凑数(蓝桥杯2017年省赛B组试题H)(C/C++)_菜只因C的博客-CSDN博客包子凑数(蓝桥杯2017年省赛B组试题H)(C/C++)https://blog.csdn.net/m0_71934846/article/details/128434225?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22128434225%22%2C%22source%22%3A%22m0_71934846%22%7D

2.8  贪心

思路:选取局部最优解,但是最大的缺陷就是在某些情况下不适用

举例:纸币问题

比如面额有1元,2元,5元,10元,20元,50元,100元,那么对于110元来说,可以用贪心从最大面额100元开始找。

但是如果改纸币面额,比如1元,2元,5元,20元,55元,100元,那么如果用到贪心算法,会发现并不能找出最优解(贪心:100+5+5=110  动态规划:55+55=110)

动态规划代码如下:

#include <bits/stdc++.h>
using namespace std;
 
int dp[10000];
int n; 
int b[6]={1,5,20,50,55,100};
int temp;
int main()
{
	dp[0]=0;
	dp[1]=1;
	dp[5]=1;
	dp[20]=1;
	dp[50]=1;
	dp[55]=1;
	dp[100]=1;
	for(int i=1;i<=10000;i++)
	{
		temp=10000;
		for(int k=0;k<6;k++)
		{
			if(i>=b[k])
			{
				temp=min(dp[i-b[k]]+1,temp);
			} 
		}
		dp[i]=temp;
	}
	for(int i=1;i<10000;i++)
	{
		cout<<i<<"元用"<<dp[i]<<"张"<<endl;
	}
	return 0;
}

2.9  分治(以后更新)

大部分是二分法

2.10  数字分拆到数组中

(2条消息) 把一个数字分拆存到数组内(C/C++)_菜只因C的博客-CSDN博客https://blog.csdn.net/m0_71934846/article/details/128698111?spm=1001.2014.3001.5501

2.11  数字和字符串的互化

求不了子数字,但能求子字符串

例题:超级质数

(2条消息) 超级质数(蓝桥杯C/C++算法赛)_菜只因C的博客-CSDN博客https://blog.csdn.net/m0_71934846/article/details/128723978?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22128723978%22%2C%22source%22%3A%22m0_71934846%22%7D

2.12  排序

(4条消息) 找字符串中最大字符(三种快速方法)_求字符串中最大的字符_菜只因C的博客-CSDN博客https://blog.csdn.net/m0_71934846/article/details/128457227?spm=1001.2014.3001.5501

2.13  冒泡排序法和二分查找法(最常用)

冒泡排序法和二分查找法(C/C++)_菜只因C的博客-CSDN博客冒泡排序法和二分查找法(C/C++)https://blog.csdn.net/m0_71934846/article/details/128757285?spm=1001.2014.3001.5502

2.14  图论

图论(入门版)_菜只因C的博客-CSDN博客https://blog.csdn.net/m0_71934846/article/details/128757672?spm=1001.2014.3001.5501

2.15  常用树

蓝桥杯常用树模板(C/C++)_菜只因C的博客-CSDN博客蓝桥杯常用树模板(C/C++)https://blog.csdn.net/m0_71934846/article/details/128764616?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22128764616%22%2C%22source%22%3A%22m0_71934846%22%7D

2.16  二次幂算法

快速幂算法(C/C++)_菜只因C的博客-CSDN博客icon-default.png?t=MBR7https://blog.csdn.net/m0_71934846/article/details/128772642?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22128772642%22%2C%22source%22%3A%22m0_71934846%22%7D

3  STL

3.1  队列(queue)

3.2  链表(list) 

 3.3  优先队列(priority queue)

 优先队列默认大根堆(大到小排序),如果想从小到大排序,那么

<int,vector<int>,greater<int> >//升序排列(小根堆)

<int,vector<int>,less<int> >//降序排列(大根堆)

3.4  向量/动态数组(vector)

 3.5  栈(stack)

3.6  集合(set) (要求没有重复元素)

set<int> s;//默认升序排列

set<int, greater<int>>  s2 = {3,2,5,1,4 ,3};//降序

set值不能修改(修改过后无法保证数据顺序)

 3.7  集合/映射/键值对(map)

3.8  迭代器

 模板:

#include<iostream>
#include<vector>
using namespace std;
int main()
{
	vector<int> v;
	v.push_back(11);
	v.push_back(7);
	vector<int>::iterator it = v.begin();
	
	while(it!=v.end())
	{
		cout << *it <<"  ";
		it++;
	}
	cout << endl;
	return 0;
}


这里大概列出参加蓝桥杯需要掌握的知识点和技巧,若想详细了解某个知识点,可以看看我的例题和别人的文章

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

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

相关文章

深度学习:CSPNet

深度学习&#xff1a;CSPNet前言解决的问题Method目前主流网络存在的问题Partial Dense BlockPartial Transition LayerExact Fusion Model实验前言 CSPNet 是作者 Chien-Yao Wang 于 2019 发表的论文 CSPNET: A NEW BACKBONE THAT CAN ENHANCE LEARNING CAPABILITY OF CNN。也…

【C语言】数据结构-单链表

主页&#xff1a;114514的代码大冒险 qq:2188956112&#xff08;欢迎小伙伴呀hi✿(。◕ᴗ◕。)✿ &#xff09; Gitee&#xff1a;庄嘉豪 (zhuang-jiahaoxxx) - Gitee.com 文章目录 目录 文章目录 前言&#xff08;链表的优势&#xff09; 一、单链表是什么 二、单链表操作…

Hadoop基础之《(2)—Hadoop概述》

一、Hadoop是什么 1、Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 2、主要解决&#xff0c;海量数据的存储和海量数据的分析计算问题。 3、广义上来说&#xff0c;Hadoop通常是指一个更广泛的概念—Hadoop生态圈。 二、Hadoop的三大发行版本 Apache版本&#x…

【论文简述】Long-range Attention Network for Multi-View Stereo(WACV 2021)

一、论文简述 1. 第一作者&#xff1a;Xudong Zhang 2. 发表年份&#xff1a;2021 3. 发表期刊&#xff1a;WACV 4. 关键词&#xff1a;MVS、注意力、级联、监督回归 5. 探索动机&#xff1a;先前的方法忽略了像素之间的依赖关系&#xff0c;并且期望回归的方式效率不高。…

Kettle(10):switch/case组件

1 机智的体育老师——条件判断 有一天,体育老师要让班上的男女同学分别排成两队。但这个班上还有几名同学,很特殊——他们是蜘蛛!!所以,机智的体育老师需要把他们排成三队,男同学一队,女同学一队,蜘蛛一队。 体育老师要做一件非常重要的事情:判断学生是男孩还是女孩、…

联想E14 开机黑屏报错2102:Detection error on HDD0 (Main HDD)

环境&#xff1a; 联想E14 Win10专业版 问题描述&#xff1a; 联想E14 开机黑屏报错2102&#xff1a;Detection error on HDD0 (Main HDD) 解决方案&#xff1a; 1.关机重启 2.尝试拆解&#xff0c;拔出硬盘数据线&#xff0c;重新安装

Scanpy 单细胞基因分析

参考&#xff1a;https://www.bilibili.com/video/BV1sq4y1C7Qx/ https://scanpy-tutorials.readthedocs.io/en/latest/pbmc3k.html 代码下载&#xff1a;scanpy分析scRNA-seq数据基本流程&#xff08;含scanpy seurat两大工具对比&#xff09; 链接: https://pan.baidu.com/s…

华为机试 HJ33 整数与IP地址间的转换

华为机试题 HJ33 整数与IP地址间的转换 一、题目描述 描述原理&#xff1a;ip地址的每段可以看成是一个0-255的整数&#xff0c;把每段拆分成一个二进制形式组合起来&#xff0c;然后把这个二进制数转变成一个长整数。举例&#xff1a;一个ip地址为10.0.3.193每段数字 …

C# - JSON Schema validation

C# - JSON Schema validation引言如何生成 C# 类 JSON Schema利用在线工具利用 Visual Studio利用 NJsonSchema验证 JSON Schema针对 JSON Schema 字符串针对 C# 类 Schema引言 针对 API 测试&#xff0c;我们需要验证 Response 中的一些字段类型&#xff0c;是否缺省等&#…

Linux操作系统精讲之高级IO

代码在&#xff1a; https://github.com/sjmshsh/System-Call-Learn 通过阅读本篇文章&#xff0c;你可以收获&#xff1a; 理解五种IO模型的基本概念&#xff0c;重点是IO多路转接掌握select&#xff0c;poll&#xff0c;epoll系统调用接口并实现简易的TCP服务器理解epoll的…

10、创建不同类型的工程

文章目录10、创建不同类型的模块10.1 创建Java模块10.2 创建Java Web模块1 IDEA中配置Tomcat2 创建Web工程3 配置Web工程并运行4 乱码的解决10.3 创建Maven Java模块1 Maven的介绍2 Maven的配置3 Maven Java工程的创建4 编写代码及测试10.4 创建Maven Web模块1 创建Maven的Web模…

java基础语法——断点调试与数据加密(基础语法练习学习)

目录 Eclipse的断点调试 基础语法的练习 Eclipse的断点调试 作用&#xff1a;查看程序执行流程和调试程序 断点&#xff1a; 就是一个标记,就是我们经常用到的debug&#xff08;检查程序错误&#xff0c;我们用到的是debug as&#xff09; A–哪里加?—— 在实际的程序行号…

Knowledge-based-BERT(二)

多种预训练任务解决NLP处理SMILES的多种弊端&#xff0c;代码&#xff1a;Knowledge-based-BERT&#xff0c;原文&#xff1a;Knowledge-based BERT: a method to extract molecular features like computational chemists&#xff0c;代码解析继续K_BERT_WCL_pretrain。模型框…

Java多线程 - 线程安全和线程同步解决线程安全问题

文章目录线程安全问题线程同步方式一: 同步代码块方式二: 同步方法方式三: Lock锁线程安全问题 线程安全问题指的是: 多个线程同时操作同一个共享资源的时候可能会出现业务安全问题&#xff0c;称为线程安全问题。 举例: 取钱模型演示 需求&#xff1a;小明和小红是一对夫妻&am…

建单向链表-C语言实现

任务描述 本关需要你建立一个带头结点的单向链表。 相关知识 什么是链表?链表和二叉树是C语言数据结构的基础和核心。 链表有多种形式,它可以是单链接的或者双链接的,可以是已排序的或未排序的,可以是循环的或非循环的。 本关让我们来学习单链表。 单链表 单向链表(单…

XC-16 SpringSecurity Oauth2 JWT

SpringSecurityOauth2用户认证需求分析用户认证与授权单点登录需求第三方认证需求用户认证技术方案单点登录技术方案Oauth2认证Oauth2认证流程2.2.2Oauth2在本项目中的应用SpringSecurity Oauth2认证解决方案SpringSecurityOauth2研目标搭建认证服务器导入基础工程创建数据库Oa…

一起自学SLAM算法:9.2 LSD-SLAM算法

连载文章&#xff0c;长期更新&#xff0c;欢迎关注&#xff1a; 下面将从原理分析、源码解读和安装与运行这3个方面展开讲解LSD-SLAM算法。 9.2.1 LSD-SLAM原理分析 前面已经说过&#xff0c;LSD-SLAM算法是直接法的典型代表。因此在下面的分析中&#xff0c;首先介绍一下直…

学习笔记:Java 并发编程④

若文章内容或图片失效&#xff0c;请留言反馈。 部分素材来自网络&#xff0c;若不小心影响到您的利益&#xff0c;请联系博主删除。 视频链接&#xff1a;https://www.bilibili.com/video/av81461839配套资料&#xff1a;https://pan.baidu.com/s/1lSDty6-hzCWTXFYuqThRPw&am…

CSS语法格式与三种引入方式

文章目录第一章——CSS简介1.1 CSS语法格式1.2 CSS 位置1.3 CSS引入方式1.3.1.行内样式表&#xff08;内联样式表&#xff09;1.3.2 外部样式表1.3.3 内部样式表第一章——CSS简介 1.1 CSS语法格式 CSS 规则由两个主要的部分构成&#xff1a;选择器以及一条或多条声明。 选择…

C语言全局变量和局部变量

局部变量定义在函数内部的变量称为局部变量&#xff08;Local Variable&#xff09;&#xff0c;它的作用域仅限于函数内部&#xff0c; 离开该函数后就是无效的&#xff0c;再使用就会报错。例如&#xff1a;intf1(int a){ int b,c;//a,b,c仅在函数f1()内有效 return abc; } i…