算法入门刷题笔记 算法竞赛入门经典第三章习题思路

一名编程新手分享在暑期补习基础算法的心得,主要通过刷ACM入门题来提升编程技能,涉及Python和C++代码示例,以及解决具体算法问题的思路。

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

写在前面

好久没更新公众号和博客了,因为最近在研究新的方向,所以很少发文。
笔者接触编程只有一年,这一年间主要研究启发式算法在运筹学中的应用。但是由于编程基础薄弱,在进一步研究复杂运筹学问题时发现基础算法不过关导致写出的代码运行速度很慢,因此很苦恼。所以决定这个暑假补习一下基础算法,主要是刷一些简单的ACM入门题。偶尔会发一些刷题笔记(偶尔!)。和作者有类似目标的同学可以一起交流共勉!

目前在看的教程:
北京理工大学ACM冬季培训课程

算法竞赛入门经典/刘汝佳编著.-2版可以在这里下载->github

课程刷题点
Virtual Judge

刷题代码都会放在github上,欢迎一起学习进步!

今天主要干正事去了,简单看了下课本的前五章,想做点习题但是太多了一点,就简单写下思路(用python && C++ && 伪代码的形式,嘻嘻)。写了一章左右,题目实在有点多,明天看看要不再挑着写一点,然后看看课程第二讲,再写Day2的习题。

第三章习题思路

第三章习题思路

在这里插入图片描述

str = input()
int count = 1
int sum = 0
for char in str:
	if char == 'O' : sum += count ++
print(sum)

在这里插入图片描述

molecule = input()
map<char, int> table
table = input()
sum = 0
for atom in molecule:
	if atom in map : sum += map.find(atom).second
print(sum)

mark一下map我还不会用(虽然经常见或者读,在java里),下次试一下。下次一定~

在这里插入图片描述

str = input()
table[10]
memset(table, 0, sizeof(table))
for char in str:
	table[char - '0']++
print(table)

在这里插入图片描述
之前看数据结构,好像看过一个算法叫KMP,感觉可能和这个有相似点?

问题说明肯定有循环,那么始终只要从第一个字母开始比较,只要查找和第一个字母相同的字母就好。

string str = input()

for i in range(str.length):
	if char = str[0]:
		if str.substr(0 to i - 1) == str.substr(i to i * 2 - 1)
			print(i)
			break
		

在这里插入图片描述
👴都不知道这破题问的是什么,哪儿有问句啊喂喂喂???

网上一查,全都是和这个一样的描述,就放代码,你们都是语文小天才吗???

👴也懒得去OJ上查了,看网上说是模拟,那就当是给字符串给出变化后的图吧。

operations[] = input
table[][] = input
x, y = find blank in table
for operation in operations[]:
	if operation = 'A':
		temp = table[x][y]
		table[x][y] = table[x][y + 1]
		table[x][y + 1] = temp
	else if ......
print(table)

在这里插入图片描述
题目应该是给黑格白格要找横向单词和横向单词的坐标了。

table[r][c] = input

for block in table: 
	if block == black:
		block down && block right are special
	if block.pos is boundary:
		block is special

for special in table form left to right:
	if special.right is special and not AcrossBlock: 
		add special.right to Across
		special.right is AcrossBlock

for special in table form up to down like above.

print Acorss and Down

在这里插入图片描述

一开始把题目看成***找出所有DNA序列中到其他序列H距离最短的DNA***,我一想还想不到啥好办法,结果上网一查是自己构造一个…那未免太DD了点吧…

DNAs[m] = input()
n = input()
char[4] = {'A', 'C, 'G, 'T'}
for i in range(n):
	count[4] = {0, 0, 0, 0}
	for DNA in DNAs[]:
		if DNA[i] == char[0]: count[0]++;
		else if DNA[i] == char[1]: count[1]++;
		......
	for max in count:
		for smallest in char[max]
			newDNA[i] = smallest
print(newDNA)

在这里插入图片描述

类似前面那个找循环的字符串吧,但这里要保证是一个循环小数呀,不然一直查下去…

a, b = input
vector<int> decimals
i = 0
while(true)
	char = decimals[i]
	if char = decimals[0]:
		j = decimals.length
		while(j < i * 2)
			decimals.push_back((a / b * pow(10, ++j) % 10)
		if str.substr(0 to i - 1) == str.substr(i to i * 2 - 1)
			print(i)
			break
	i++

在这里插入图片描述

前两天Day1里做过,跳过了。

在这里插入图片描述

我仔细一想,长方体只能有长宽高,那只要判断输入的数字是否只有3个就好了吧?

欢迎打脸。。。如果是这样就不写了。。。

在这里插入图片描述

就简单写一个暴力好了,不知道会不会TL。。。

str1, str2 = input

for i in range(str1):
	for j in range(str2):
		if str1[i] + str2[j] > 2: break

在这里插入图片描述

没看懂题面,不做了不做了~

后记

随便写不用上交不用debug的感觉可真好…咳咳,但是这样学不到东西,以后还是老老实实刷题吧…下次还是写规范的伪代码吧,写混着写了,这样玩没啥效果…

<think>好的,我需要帮助用户找到关于蓝桥杯算法竞赛的备考策略和学习资源。首先,用户已经提供了四个引用内容,我需要仔细分析这些引用的信息,然后结合自己的知识库给出合适的建议。 首先,引用[1]提到蓝桥杯省赛时间在4月初,用户可能现在需要高效的备考策略。里面提到了搜索专、思维导图和重要算法的整理。这可能意味着需要分阶段复习,先从基础算法开始,比如搜索、递归、动态规划等。 引用[2]提到了备考路线,从0到1的过程,可能适合刚开始备赛的同学。需要推荐系统化的学习路径,可能包括顺序、资源分享等。这里可能需要强调基础知识的巩固和分阶段学习。 引用[3]列出了蓝桥杯常考的基础算法,如暴力、贪心、递归、二分、快排、DFS、BFS、动态规划、数论等。这说明备考时需要覆盖这些核心算法,每个部分都需要深入理解和练习。 引用[4]详细介绍了BFS算法,强调其使用队列和最短路径的特点。这可能提示用户需要重点掌握这类算法,并理解其应用场景。 接下来,我需要将这些信息整合成一个清晰的备考策略,包括分阶段学习、重点算法、推荐资源和练习方法。同时,用户需要学习资料和建议,所以需要推荐书籍、在线平台、往届真等资源。 还需要注意用户提到的中文回答,确保回答结构清晰,分点列出,并使用正确的LaTeX格式。可能的问点包括如何安排时间、如何选择练习题、如何提升编码效率等。 另外,根据系统级指令,生成相关问。例如,关于如何高效、如何提升动态规划能力、如何利用STL库等。 最后,确保回答中正确引用提供的资料,比如在提到备考阶段或算法时添加引用标识,如[^1][^2][^3][^4]。</think>### 蓝桥杯算法竞赛备考策略与学习资源 #### 一、备考阶段规划 1. **基础巩固阶段(1-2周)** - **核心算法**:优先掌握暴力枚举、递归/递推、排序(如快速排序)、二分查找、字符串处理等基础算法。 - **数学基础**:复习数论相关内容(素数判定、最大公约数、最小公倍数)及简单动态规划(如背包问)。 - **推荐资源**: - **书籍**:《算法竞赛入门经典(第2版)》(刘汝佳) - **在线平台**:洛谷、AcWing的“蓝桥杯真”专。 2. **进阶强化阶段(2-3周)** - **重点算法**:深度优先搜索(DFS)、广度优先搜索(BFS)、回溯、双指针、动态规划(背包、最长子序列)、图论(最短路径)[^4]。 - **实战技巧**:学习C++ STL库(如`vector`、`queue`、`priority_queue`)提升编码效率[^3]。 - **练习方法**:每日3-5道真,注重时间复杂度和边界条件分析。 3. **冲刺模拟阶段(1周)** - **全真模拟**:限时完成近3年蓝桥杯省赛真,模拟考场环境。 - **查漏补缺**:根据错集中复习薄弱环节,例如动态规划的状态转移方程或DFS的剪枝优化[^4]。 --- #### 二、学习资源推荐 1. **官方资源** - 蓝桥杯官网:提供历年真和样下载。 - 蓝桥杯模拟考试平台:熟悉在线评测系统(OJ)环境。 2. **在线课程与解** - **B站视频**:搜索“蓝桥杯备考”关键词,如《蓝桥杯每日一》系列。 - **GitHub仓库**:例如“lanqiao-cup”开源项目,包含分类解和模板代码。 3. **书籍与文档** - 《算法笔记》(胡凡):适合快速掌握竞赛常用算法。 - 《挑战程序设计竞赛》:涵盖高阶算法如网络流、线段树。 --- #### 三、高效备考技巧 1. **分模块突破** - 将算法分为搜索、动态规划、数论等模块,逐个击破。例如,DFS/BFS可通过“迷宫类”问集中训练[^4]。 - 使用思维导图(如XMind)梳理算法间的关联。 2. **代码模板化** - 整理常用算法模板,例如快速排序的递归与非递归实现: ```python def quick_sort(arr): if len(arr) <= 1: return arr pivot = arr[0] left = [x for x in arr[1:] if x < pivot] right = [x for x in arr[1:] if x >= pivot] return quick_sort(left) + [pivot] + quick_sort(right) ``` 3. **时间管理** - 比赛时优先解决简单(如填空),确保基础分;复杂(如编程大)留足调试时间。 --- #### 四、常见问与解决 - **Q1**: 动态规划状态转移方程如何设计? **A**: 从子问定义出发,结合目条件列出递推式。例如背包问: $$ dp[i][j] = \max(dp[i-1][j], dp[i-1][j-w_i] + v_i) $$ 其中$w_i$为物品重量,$v_i$为价值。 - **Q2**: 如何优化DFS超时问? **A**: 通过剪枝(如可行性剪枝、最优性剪枝)减少递归深度,或改用BFS+队列实现。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值