这是一个好东西->作者主页
T1 扑克牌(90)
题目大意:给你一堆牌,每次可以取任意一个区间的牌,求最少几次可以取完。
思路:
- 因为每次取一个区间的牌,所以直接暴力枚举最大区间,然后减去它们中的最小值。减去值的操作类似区间修改,所以用分块维护。时间复杂度: O ( n s q r t ( n ) ) O(nsqrt(n)) O(nsqrt(n)),时间超限90
- 把分块改成线段树,时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn),AC
- 我们发现,每次消除最少的后,有一些会比他多,所以输入时判断如果ai<ai+1则加上他们的差。注意答案加上第一个数。时间复杂度: O ( n ) O(n) O(n),AC
T2 汉诺塔(75)
题目大意:给定汉诺塔和所求步数,并定义移动规则,让你输出那一步。
思路:找规律。打表可得每6个为循环节,所以直接输出就行了。
T3 城市统计(0)
题目大意:给你一个地图,让你求每一个(2r+1)长宽的方阵内所有居民区到商业区的距离和。
思路:bfs+二维前缀和。
T4 香樟树(60)
题目大意:让你在n个数里按顺序选几个数,使他们相邻两个数都不互质。求最多个数。
思路:
- 设dp[i]表示选了第i个的最多个数,转移方程很简单。时间复杂度: O ( n 2 ) O(n^2) O(n2)
- 因为每次转移都要遍历前面的数,但是前面的数很多没用,所以只需要枚举质因数即可。时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
完成情况
- T1
- T2
- T3
- T4
题外话
第四题打了队列优化,本以为可以A,结果还是60,呜呜 😦……
本文回顾了一名算法工程师在TOPT1扑克牌问题上的优化过程,从暴力枚举到分块维护再到线段树,展示了汉诺塔的规律性解法,T3城市统计通过BFS和二维前缀和解决,T4香樟树优化了质因数枚举。最终分享了竞赛中的成长与思考。

被折叠的 条评论
为什么被折叠?



