SD集训总结

博主回顾了参加SD集训的全过程,详细分析了每场比赛中的算法应用,包括动态规划、贪心算法在解决比赛题目中的重要作用。在反思中,博主指出在换根DP和根号分治上的不足,需要加强练习,并提到了在数据结构题中遇到的困难,如线段树、Splay树和分块技巧的应用。此外,博主还总结了比赛中忽视数据范围、取模、分块和状态转移等常见错误,强调了对trick的学习和对题目的深入理解的重要性。
摘要由CSDN通过智能技术生成

比赛

D1

8:00–8:10 读题,T1没太看懂是什么东西.T2,3暴力挺好写的,先写T2,3暴力。

8:10–9:00 T1,可以写一个暴力,枚举状态,然后dfs跑联通性。考虑性质,貌似点值是单峰的,某个点突出,向四周扩散递减。
9:00–10:30 T1,发现m特别小,可以直接枚举nm,处理每个点i值为j的DP值,凭感觉换根DP就可以了。然后挂了,调了半天调不出来。
10:30–10:40 考虑要不要放弃T1写T2,3,看了几眼题目,满脑子都是T1根本想不了其他的。
10:40–11:00 T1,发现换根的时候多余点的系数贡献没削干净,调整后过掉了大样例。理论复杂度是nm^2logV
11:00–11:50 T1,随便造了一组大数据,发现跑了10s。考虑优化。DP时,对于父亲和儿子值的m^2枚举,可以预处理前后缀,用容斥优化到m,于是复杂度nmlogV.发现快速幂非常之慢,做了[nm*大常数]次,可以直接预处理出nm个逆元,然后数组O1访问,这样只用做nm次。于是卡到了4s,O2 意义下2s。莫名想到光速幂,试了半天反应过来这不同底,根本做不了,如果要离线做复杂度还会多一个log,反而更劣。考虑到评测的机子跑的很快就放了。

回顾&反思

T1: 貌似很直观也很签。如果能想到固定的根的DP,那么做个换根就可以了。不过感觉考试的时候换根思路一开始不是很清晰,导致后面的修改调试耽误了很多时间,没有更多时间思考T2,3,尤其是T2的40分。可能是最近一段时间都没有做过换根DP的缘故?以前做cf什么的发现换根有很多种写法,这次考试的时候也纠结了半天,然而忽略了~~适合自己的才是最好的(划掉)~~一切要依据于题目,最后还是按照自己的想法去写了,效果还是不错的,但是还是显得有一点生疏。

T2:感觉很亏啊,考试的时候不知道怎么就和长度m杠上了,非要多枚举一个长度m,然而事实是总和递增,所以总和本身就代表着一种"有序",所以直接按总和做状态就可以了。感觉这道题想的有点浅(也有可能是几乎没花多少时间在这道题的原因),导致只拿到了n<=30 的弱智分。把维度改一下,40pts就有了。至于正解什么的,实际上就是在暴力DP的基础上进行根号分治,取答案的时候限制一下保证是当前钦定的状态就可以了。比赛时想到过长度有限的性质,但由此想到的都是些队列bfs和剪枝dfs什么的,完全没往根号分治上想。忽然想起来,我好没做过几道根号分治的题目。另外一点小trick就是,这个std非常妙,dp的时候直接开n\sqrt n 是开不下的,但是观察dp式,发现访问下标的跨度只有2m左右,于是就可以建立mod 3m意义下的数组,类似于 3m 进制的滚动数组。

T3:没什么想法。看题解是各种奇奇怪怪的数学推导。等什么时候订过再来upd这一条吧。话说考试的时候莫名想到了狄利克雷卷积什么的,才发现自己对常见卷积以及独角晒这一块有点陌生了,回去后要再看看。

换根DP,根号分治要加强练习。

省选数论,尤其是狄利克雷卷积、独角晒这些东西要复习。

滚动数组的trick。

D2

8:00–8:05 读题,T1又臭又长还是数据结构,先做T2、3。
8:05–8:25 T3,S<=25随便DP做。
8:25–9:00 T2,可以做背包,物品总数最多log个,考虑直接NTT做背包,然后暴力卷k次得到答案。写完调了半天过不去才发现这模数不是NTT模数,需要任模NTT用CRT合并。然而我忘了常用模数有多少根本没法做。考虑暴力试模数,然而我把模数改成998244353也不对就很怪。
9:00–10:30 T1。发现答案与差分有关的性质。n<=1000暴力模拟即可。没有34操作可以线段树。没有3操作可以可持久化线段树。内存已经400MB了。考虑没有4操作,可以splay,但是不太好做。大胆猜测正解就是splay,但是如何支持可持久化呢?不清楚。
10:30–11:50 T3,重新审视T3,n<=1000 可以容斥。思考m-n怎么做。

赛后: T1分析性质时没有考虑ai为负数的情况,即我推的规律在有负数时不成立,挂0.T3 一个1e10级别的long long 没有取模,乘的时候乘炸了,爆long long。总共接起来挂了 50分左右,呜呜呜呜。

回顾&反思

T1: 不知道怎么形容,比赛的时候完全没反应过来数据范围带了一个绝对值,推的性质只在正整数情况下成立,虽说更一般的性质只是稍微拓展一下就行了,但是维护完全不一样然后完美爆蛋。忽略绝对值这种错误不知道犯了多少次了还是犯,很无语。对于正解,性质方面,有个很妙的转化就是发现序列左右反转答案本质相同,所以可以先维护答案的2倍,然后再除以2就可以了,这要比直接维护答案要简单得多得多,思路和实现方面,感觉思路方面主要还是卡在可持久化上了,比赛的时候完全不知道怎么可持久化splay,然而实际上不许要对数据结构可持久化,反过来,可以对操作进行离线,尤其是这种撤回贡献比较容易的题目,往往就可以用到"操作树"这样的trick。
T2:忘记NTT模数就很亏,不熟悉任模NTT就很亏,不然可以再多拿大概30分的部分分的。
T3:啊,忘记取模,做的时候只考虑了对于乘法的取模,完全没注意到一些数字本身就会超过模数,然后炸掉,这一方面是考虑周到与否的问题,另一方面也是经验的问题,这种错误以后坚决不能犯了。

回顾splay.

掌握"操作树"的trick.

复习任模NTT。

注意取模时不仅要对乘法等取模,还要关心数本身的值域,对于很大的数要单独取模。

D3

做核酸耽误了点时间,大概8:10左右才看到题目
8:10–8:15 读题,T2又是个读不懂的sb题。依旧先做T3,T1.
8:15–8:35 T3,对于n<=5000,可以n^2扫,双指针维护选了哪些数,枚举右端点,贪心删除左端点即可。
8:35–9:20 T1,对于n<=5000 暴力模拟即可。考虑数据随机怎么做,想到考虑每个数的贡献,然后就发现这玩意可以直接过1e6 A掉??。考虑每个数的贡献,钦定枚举的数为最大值,二分查找有贡献的区间,再二分找到两边达到min的区间长度,容斥的累计答案即可。注意卡常数,卡过1e6应该是没问题的。写的时候出了一些问题,很快调试完毕。
9:20–9:35 T3,考虑5e4怎么做。莫名想到莫队,维护出当前最优答案即可,然而这种做法实际复杂度无法保证,且不具有正确性。
9:35–10:00 T2,终于读懂题目。对于k<=5想dfs一下,然而仔细算一算发现复杂度爆炸。图有环不好处理,考虑tarjan锁点后变成dag 然后DP,但问题是每个连通分量无法处理。发现k<=5最多走的步数很少,想到对于每个连通分量枚举花了多少步数,然而这非常复杂且还是离不开环相当缩点一点用没有。又想到对于一个开关,其被按超过一次,当且仅当存在一个更大的开关被按了,考虑能不能维护每个开关的状态DP,但是存在很复杂的情况只是维护这些貌似不太够,考虑状压,然而这依旧无法回避环的问题。又想到高斯消元,然而暴力高斯状态数高达2000,n^3复杂度根本完不成,而且得到的解貌似不能保证是想要的解。
10:00–10:50 T3,考虑能不能维护每个元素第一次出现的位置和最后一次出现的位置,然后贪心去做,然而实际情况很复杂这根本实现不了。依旧想到不同询问的继承关系,然而很假。
10:50–11:10 犯瞌睡
11:10–11:40 T3,空跑了一下5e4*5e4,发现跑的飞快,于是直接将询问按左右端点排序,固定左端点,枚举右端点,更新对应区间的答案,复杂度最大n^2/2,注意常熟感觉应该能跑过。自己随便随了一组数据只跑了1.2秒左右,何况这还是win7的机子。
11:40–12:00 检查了一下freopen和文件夹就提交了。

回顾&反思

T1: 很"计蒜客"很签到(当然主要是因为题目弱化到了1e6),nlog二分乱搞就过了。调试时间还是稍微有一些长。对于正解的O(n)做法要学习。

T2:比赛的时候完全没找到DP的方向,感觉自己每次遇到这种带环,图,瞎几把走的题目就不知道怎么写。正解的DP状态很简单,i,j,h,从i到j,开关不超过h,利用开关只有更高的开关按下才能再按的性质,在限制大小后,最高的开关最多按一次,然后就可以枚举中转点DP了。比较巧妙的转化是将题目的钦定变为DP时的不钦定,再由原本的不钦定通过转化模型变为钦定,这貌似是个常见的套路 or 思路?再考虑钦定的时候,相当于每个询问是一个点,然后强制走对应的端点,所以DP的框架几乎不需要变动,枚举的时候,如果是询问的端点,把强制走的系数加上就可以了。

T3: 青蛙题,不是很明白为什么学姐的nQ能卡过5e4而我的不能。首先是套路,类似于扫描线,针对区间式的询问,可以根

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值