2023.2.19比赛总结+题解

文章回顾了一次编程竞赛中的四道题目,分析了在解决构造题、质因数分解、动态规划和障碍物路径计算问题时的思路与错误,强调了时间复杂度、特判、优化取模等技巧的重要性,并指出时间分配和深入思考是提升解题效率的关键。
摘要由CSDN通过智能技术生成

T1 背景亲民的1h猥琐构造题

题意

  • 一个点使周围的空位贡献 + 1 +1 +1(扫雷),构造出一种总权值为 S S S的方案。

思路

容易发现,一个点最大的贡献是 + 8 +8 +8,也就是说,我们只需要讨论 S S S% 8 8 8的余数不为 0 0 0 7 7 7种情况就可以了。
通过样例的提示,很容易发现余数为 6 6 6的一种构造方法,即:
6
然后,经过40min+的开动脑筋,又找出了:
1
3
5
至此,我们就有了4种构造方法,分别为1、3、5、6。然而,想继续简单地找比较难了,就考虑组合起来。
经过尝试,发现 2 = 1 + 3 + 6 − 8 , 4 = 1 + 3 , 7 = 1 + 6 2=1+3+6-8,4=1+3,7=1+6 2=1+3+68,4=1+3,7=1+6。那么至此,这道题就无了。
但是,考试时这道题时间花的太多了,以至于T4根本没有足够的时间思考,必须给T1多扔几个锅(doge。说实话,本来以为A是签到题的,没有想到,扫雷给了我巨大的惊吓,导致最初思路一度走偏。叹气。

T2 被反套路了的一眼假水题

题意

  • 给出 n , ( 1 ≤ n ≤ 1 0 18 ) n,(1 \leq n\leq 10^{18}) n,(1n1018) O ( 1 0 3 ) O(10^3) O(103)以下求出 n n n分解质因数后的最小指数。

思路

第一眼看过去,不就是分解质因数吗,水~。然而仔细一想,才发现, 1 0 18 10^{18} 1018至少要筛到 1 0 9 10^{9} 109才行,只要这么干,绝对全是TLE。
既然已经知道了最多筛到 1 0 7 10^{7} 107,那就从结果反推做法,发现最多剩下一个大质数或两个大质数相乘,那就简单判一下平方数就行。
然而,当时高估了单次查询允许的复杂度,直接切了。痛失40分。
赛后补救:再来一次从结果反推过程, 1 0 3 10^3 103个质数大约可以筛6、7千,而这个数距离 5 1 0 18 ^5\sqrt{10^{18}} 51018 比较接近,因此,只要多判几次就可以了~
对于特判部分,只会剩 1 1 1~ 4 4 4个质数, s q r t sqrt sqrt判2和4次方,二分判3次方,否则就是1个。

T3 惨遭卡常的繁琐DP题

题意

  • 求从 A A A走到 B B B的方案数(图形是一个伪三维的立体图形)在这里插入图片描述

思路

一眼DP,然而题意理解出错,误以为可以从内部走。。。
分层讨论,每一层有3种点

  1. 外围通向下一层的点
  2. 内圈通向上一层的点
  3. 右侧和后方直通上下的点

d p [ i ] [ j ] [ k ] dp[i][j][k] dp[i][j][k]表示 k k k i i i j j j列的方案数。相应的,有三种转移方法

  1. d p [ i ] [ j ] [ k ] = d p [ i ] [ j ] [ k − 1 ] + ( d p [ i − 1 ] [ j ] [ k ] 或 d p [ i ] [ j − 1 ] [ k ] ) dp[i][j][k]=dp[i][j][k-1]+(dp[i-1][j][k]或dp[i][j-1][k]) dp[i][j][k]=dp[i][j][k1]+(dp[i1][j][k]dp[i][j1][k])
  2. d p [ i ] [ j ] [ k ] = d p [ i − 1 ] [ j ] [ k ] + d p [ i ] [ j − 1 ] [ k ] dp[i][j][k]=dp[i-1][j][k]+dp[i][j-1][k] dp[i][j][k]=dp[i1][j][k]+dp[i][j1][k]
  3. d p [ i ] [ j ] [ k ] = d p [ i ] [ j ] [ k − 1 ] + ( d p [ i − 1 ] [ j ] [ k ] 或 d p [ i ] [ j − 1 ] [ k ] ) dp[i][j][k]=dp[i][j][k-1]+(dp[i-1][j][k]或dp[i][j-1][k]) dp[i][j][k]=dp[i][j][k1]+(dp[i1][j][k]dp[i][j1][k])

注意到,每层内圈最右边的点既属于2类又属于3类,特判一下。
还有,取模要优化!!!!!
20分啊!!!!

T4 想打暴力得部分分未果

题意

  • n × m n\times m n×m矩阵内有 k k k个障碍物,一个点对的距离为他们的曼哈顿距离,求所有路径长度的平均值。

思路

平均值即总长除以路径数,路径数容易求得,为 非障碍点 数 2 非障碍点数^2 非障碍点2,至于总长,enmmm,不好算。于是果断开始暴力枚举两个点,对其曼哈顿距离求和。然而,这种做法又是有错的。别真以为障碍是摆设了。痛失100分……
我们发现,如果把行和列分开枚举,似乎只有 N 2 N^2 N2的时间复杂度,第 i i i行到第 j j j行的贡献为: i 的可用点数 × j 的可用点数 × a b s ( i − j ) i的可用点数 \times j的可用点数 \times abs(i-j) i的可用点数×j的可用点数×abs(ij),列同理。
又发现,只有一个坐标连续且另一个坐标保持单调的障碍会为两侧点对的最短路 + 2 +2 +2,于是,分横纵坐标讨论,用单调队列维护。一个小细节,同行列的也会 + 2 +2 +2


最后的总结

总的算下来,一场考试有 A 5 分 + B 20 分 + C 20 分 + D 30 分 A5分+B20分+C20分+D30分 A5+B20+C20+D30是不应该丢掉的。
A题写一个spj,B题判平方数过小数据,C题优化取模,D题想得深入一些。都是可以挽救的。
收获的经验:自己写spj判断、通过时间复杂度推断做法,卡常!!!!。
改进的地方:时间分配上的问题(D题都没有时间细想,何谈写spj??),D题时间着实不够用,A耗费有些多,C同样,细节较多,要是写得一遍过样例就完美了

E N D E_ND END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值