蓝桥常考的几种题型

本文介绍了蓝桥杯全国软件和信息技术专业人才大赛,重点讲解了双指针算法、二分法(折半查找)和深度优先搜索(DFS),并提供了相关例题,旨在提升参赛者的算法技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一.蓝桥杯简介

二.双指针

三.二分法

四.dfs(深度优先搜索)

一.蓝桥杯简介

        蓝桥杯全国软件和信息技术专业人才大赛,是由工业和信息化部人才交流中心举办的全国性IT学科赛事。大赛共包括三个竞赛组别,个人赛-软件类,个人赛-电子类,以及视觉艺术大赛。其中个人赛-软件类的比赛科目包括C/C++程序设计、Java软件开发、Python程序设计。

二.双指针

        在历届中双指针这个算法出现的频率不是太高,但总归还是会考,我们想要搞好蓝桥杯应该要掌握这个算法的原理以及实际的应用。

        双指针算法的核心思想是优化时间的复杂度。双指针的具体应用方式可以具体分为快慢指针与对撞指针。

        盛水最多的容器

        移动零

三.二分法

·        二分法又叫折半查找法,原理是将一个有序的数组分为两半从中间位置开始搜索的算法,如果当前查找数据小于目标数据则将中间位置的下一位替换为左边界,如果当前查找数据大于目标数则将中间位置的上一位替换为右边界,依照上面的流程逐次查找,直至得到目标数值。时间复杂度为O(logn)。

        

        卡牌

        分巧克力

        

//例题 分巧克力
//题意大概是有k个小盆友,n块巧克力,第i块巧克力有H(i)与W(i)的高度与宽度
//问你如何将巧克力分成长宽相等的巧克力分给小盆友,且巧克力越大越好。
#include<iostream>
using namespace std;
const int N=1e5+10;
int num[N][2];
int n,k;

bool check(int mid)
{
	int sum=0;
	for(int i=0;i<n;i++)
	sum+=(num[i][1]/mid)*(num[i][0]/mid);
	
	if(sum>=k)
	return true;
	else
	return false;
}

int main()
{
	cin>>n>>k;
	for(int i=0;i<n;i++)
	{
		cin>>num[i][0]>>num[i][1];
	}
	
	int l=0,r=100000,max=0;
	while(l<=r)
	{
	int mid=(l+r)>>1;
	if(check(mid))//长宽为mid的巧克力是否满足小盆友的需要
	{
		max=mid;
		l=mid+1;
	}
	else
	r=mid-1;
	}
	cout<<max<<endl;
	return 0;
}

四.dfs(深度优先搜索)

        深度优先搜索是一种一条路走到底的搜索方式,利用了递归的原理。

        

        如图,深度优先搜索的步骤是从左到右,从上到下的开始进行数组的遍历与查找来实现查找最优方式的一种算法,大致流程是从1开始查找,向左下查找直至到尽头,再返回上一级开始向右下开始查找直到尽头,如此往复,直至查完整个数组。

        飞机降落

        买瓜

       例题 分糖果

        

//例题 分糖果
//题意大概是有两种糖果分别是16个与9个,要分给7个小盆友,每个人最少2个最多5个
//问你有几种分法
#include<iostream>
using namespace std;
typedef long long ll;
ll num=0;

void dfs(int x,int y,int z)
{
	if(x>=7)
	{
		if(y==0&&z==0)
		num++;
		return ;
	}
	
	for(int i=0;i<=y;i++)
	{
		for(int j=0;j<=z;j++)
		{
			if(i+j>=2&&i+j<=5)
			dfs(x+1,y-i,z-j);
		}
	}
	return ;
}

int main()
{
	dfs(0,9,16);
	cout<<num<<endl;
	return 0;
}

五.总结

        总结了这段时间里的一些微末的见解,希望能在此基础上提升我算法的能力,早日弥补这个短板。如果能够你带来一点帮助我感到不胜荣幸。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值