2020.10.31【普及组】模拟赛C组总结

本文回顾了一名算法工程师在TOPT1扑克牌问题上的优化过程,从暴力枚举到分块维护再到线段树,展示了汉诺塔的规律性解法,T3城市统计通过BFS和二维前缀和解决,T4香樟树优化了质因数枚举。最终分享了竞赛中的成长与思考。

这是一个好东西->作者主页

T1 扑克牌(90)

题目大意:给你一堆牌,每次可以取任意一个区间的牌,求最少几次可以取完。
思路:

  1. 因为每次取一个区间的牌,所以直接暴力枚举最大区间,然后减去它们中的最小值。减去值的操作类似区间修改,所以用分块维护。时间复杂度: O ( n s q r t ( n ) ) O(nsqrt(n)) O(nsqrt(n)),时间超限90
  2. 把分块改成线段树,时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn),AC
  3. 我们发现,每次消除最少的后,有一些会比他多,所以输入时判断如果ai<ai+1则加上他们的差。注意答案加上第一个数。时间复杂度: O ( n ) O(n) O(n),AC
T2 汉诺塔(75)

题目大意:给定汉诺塔和所求步数,并定义移动规则,让你输出那一步。
思路:找规律。打表可得每6个为循环节,所以直接输出就行了。

T3 城市统计(0)

题目大意:给你一个地图,让你求每一个(2r+1)长宽的方阵内所有居民区到商业区的距离和。
思路:bfs+二维前缀和。

T4 香樟树(60)

题目大意:让你在n个数里按顺序选几个数,使他们相邻两个数都不互质。求最多个数。
思路:

  1. 设dp[i]表示选了第i个的最多个数,转移方程很简单。时间复杂度: O ( n 2 ) O(n^2) O(n2)
  2. 因为每次转移都要遍历前面的数,但是前面的数很多没用,所以只需要枚举质因数即可。时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
完成情况
  • T1
  • T2
  • T3
  • T4
题外话

第四题打了队列优化,本以为可以A,结果还是60,呜呜 😦……

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值