SD集训总结
day1
1.时间安排
8:00~8:20 看题面
T1:很像DDP,可以先写个 \(n^2\) 的暴力DP,m=1应该可以直接用简化的DDP冲过去。
T2:数数题,n=5000也许可以 \(n^2\) DP, c=0应该是性质分。
T3:数论题,30分裸莫反,也许可以用杜教筛再筛10分。
8:20~9:30
先开T3。
打完莫反30分,开始想杜教筛,发现要筛 \(\mu(i)^2\) 的前缀和,想了很久怎么搭配函数都没结果。
9:30~10:30
先写T2的暴力。
发现c=0可以转化成方程求解数,而且n=1e5可以直接枚举,直接求 \(\sum_{i=0}^{n}[(\frac{2n}{i+1}-i)%2==0]\)即可。
10:30~12:00
先写T1的暴力。
试着写了一发 \(n^2\) DP,发现转移要带一个900的常数,而且答案不对,就没信心调了。
然后写了c=0的DDP,调了很久没结果。
12:00~13:00
回头想T2,发现只需要记录数字的和以及最后一个数字就能 \(n^2\) DP了,调试没问题。
result:
T1:20 T2:50 T3:30
2.总结
(待upd)
day2
1.时间安排
8:00~8:20 看题面
T1:很数据结构,如果能推出来要求什么应该能拿不少分(埋下伏笔)。
T2:看上去像多项式,但是n大的离谱。有20分暴力卷积,还有23分任模NTT(为什么偏偏是1e9+7……),还有27分K=1可能可以找规律。
T3:数数题,10分暴力枚举,还有20分应该是 \(n^2\) DP, 数据范围限制的是 \(m-n\) 很奇怪。
8:20~9:30
先开T2。
发现做卷积之前还要DP求每一项的值,不过这个DP比较简单。
完全忘了任模NTT怎么写,也不会MMT,而且一分析需要做180遍NTT应该也过不掉,就弃疗了。
之后想了想K=1,发现只要能求一个数的拆分方案即可,但是不会求……
然后推了一个看上去可以根号递归的式子,复杂度萎了。
9:30~10:30
先写了暴力。
打了一些表,然后试着按组合意义推式子,居然真推出来了(虽然系数是试出来的……),调试没问题。
10:30~12:00
想了很久T1到底是求什么,发现是类似求折线的峰谷和,打暴力调了很久才调出来正确的式子。
然后试着把式子简化,没什么头绪,试了转成差分、最大最小值等等都不对。
想了很久,还是放弃了。
12:00~13:00
在T2和T3间乱想,没想出来什么。
result:
T1:10 T2:20 T3:30
2.总结
(待upd)
day3
1.时间安排
8:00~8:30 因为核酸码的问题耽误了半个小时。
8:30~8:40 看题目
T1:看上去像数据结构题,数据随机的话max+min=X的区间应该不多,也许能用乱搞做法水过去
T2:DP题,图上的话可能要高斯消元这类的,送了15分样例分。
T3:数据结构题,感觉可以大力分块50分。
8:40~10:00
先开的T3。
先把n=5000的 \(n^2log\) 打出来,枚举左端点二分右端点,根据区间颜色数check。
一通分析,觉得区间颜色数可以用bitset维护,然后分块预处理部分信息,算了复杂度很正确,大概是个 \(O(\frac{n^2}{64}*log n+n\sqrt nlog n)\),就直接开始写。
一直调到10点左右也没调出来,先看前两题。
10:00~11:30
先写T1的 \(n^2\)。
思考可以枚举一个最大值a,去找等于X-a的最小值,可以用单调栈维护处可以成为最大或最小值的区间,然后简单容斥,如果数据随机的话,可以配对的数量非常少,复杂度应该是对的。
细节比较多,调了很久答案对了,但跑的很慢,卡了卡常数跑到了1s以内。
11:30~12:20
觉得K<=5可能能搜出来,打完发现还是T了,但是以为是死循环,查了很久才发现是复杂度不对。
想了一会状压,没什么思路。
12:20~13:00
继续调T3,到比赛结束。
result:
T1:30(随机数据这么强?) T2:20 T3:0(空间炸了……)
2.总结
T1
随机数据看来是给正解常数大的,是我想多了……
感觉自己场上大脑宕机了,赛后一遍过。
实际上并不需要枚举那个配对,考场上一直在想怎么优化枚举配对,方向错了。
实际上固定最大值后就可以在它可以成为最大值的区间里面二分,我的做法是二分6个位置容斥,居然跑的飞快(6log踩4log)。
标程是扫描线+单调栈可以做线性,回来再研究。
T2
DP神题。
没考虑到按钮可以和图上的移动分开考虑,而且没发现按钮实际上是个不短增长的二进制数。
发现这几点可以状压DP35分(%学姐)。
标程是多项式,看不太懂。
T3
数据结构好题。
首先可以把询问离线下来扫描线,这点没想到非常不应该(考场上一直认为离线的话只能用莫队做)。
然后可以发现对于固定的右端点,合法左端点最大不超过所有区间内只出现一次的数的最小位置,这个东西可以用线段树或者并查集维护。
然后就变成了区间覆盖区间求min。
可以说每一步转化都非常妙。
others
1 . namespace的空间并不是只有using后才会分配,只要开出来就会分空间。
2 . 今天的开题策略太鲁莽了,应该先把所有的暴力分打完再冲正解。
day4
1.时间安排
8:00~8:15 看题面
T1:数学题,1e18显然是结论题,可以先试试推 \(O(n)\) 的式子。
T2:计数题,可能是DP,但是数据范围很大,很像数据结构题,可以试试写 \(n^2\) 暴力,还有K二进制下全是1的分数可以想一想。
T3:数据结构题,是卡空间不卡时间的题,可以试试冲空间小的 \(n^2\) 时间算法。
8:15~9:30
先开T1。
先推了个 \(n^2\) 枚举的式子,有一维显然可以用上下界优化,变成了这个样子:
样例可以过,和 \(n^3\) 纯暴力对拍也没问题。
发现瓶颈在于两个max,能去掉显然是等差数列求和的形式。
通过打表和求解不等式发现分为两个区间:\([1, \frac{\frac{n}{2}+1}{2}]\) 和 \([\frac{\frac{n}{2}+1}{2}+1, \frac{n}{3}]\),分别是两个除以2向下取整的等差数列,分别计算等差数列和奇数个数即可。
对拍没问题。
9:30~11:00
写T2。
发现原问题等价于枚举一个数,处理出它和数列中除了他的两两异或和,再统计异或和小于等于K的个数,答案除以6即可,复杂度 \(O(n^3)\)。
最后一步显然可以fwt,但是复杂度是 \(O(n^2logn)\) ,不能通过n=10000的数据(但帆神过了一个点%%%),就没去继续想。
想K二进制下全是1的数据,受样例解释的启发,发现可以划分为若干个长度为K+1的区间,三个数只能在同一个区间内选,并且是任意的,即答案为 \(\sum_{i}^{区间总数}(^{|S|}_{3})\),K=1e9显然不能直接暴力。
发现大部分都是满区间,只有给定值域区间的边界可能不满。满区间可以直接用个数 * 方案数求,边界直接线段树求解。
和 \(n^3\) 暴力对拍没问题。
之后想了很久 \(n^3\) 怎么做到 \(n^2\) ,没什么结果。
11:00~13:00
T3。
先写了时空均为 \(n^2\) 的暴力,可以过10分。
然后想了一下 a=1或2 的分,本来打算写区间覆盖线段树,发现直接模拟复杂度就可以过,又拿10分。
之后分析了一个空间 \(O(n\sqrt n)\) 的做法,修改时整块的加进整块的队列,散块加进单点的队列,给每个点维护两个指针,因为每次修改最多pop掉一个数字,理论复杂度正确,可以再过10到20分,但是细节很多,写完对拍挂了,一直到结束也没调出来。
result:
T1:100 T2:20 T3:20
2.总结
T1:
发挥不错,但是推式子的时间略长,下次这种一眼题时间控制在1h内切比较合适。
关于上下取整的分析还是不够熟练,在讨论上下取整边界花了不少时间。
T2:
神仙DP题X2。
没想到会和trie树有关,一直在往异或卷积的性质上想,方向错了。
第一次见在trie树上做类似数位DP的套路,通过讨论目标当前位来考虑走树上的01边,在处理与、或、异或和小于等于一个数时很方便。
订题写的是不需要太多思维的大力分讨,常数很大,可以再看看别的做法。
T3:
数据结构好题X2。
问题转化很妙:统计每个时间数字种类数->每个数字存在时间并集。
每个询问对应的数字存在时间又可以转化位区间每个位置数字存在时间的最大值,反过来用位置更新询问。
暴力可以 \(O(nm)\) 双指针做,用分块优化即可,参考题解
标程是 \(O(nlog^2n)\) 的,回头学习一下。
day5
8:00~8:20 看题面
果然lxl的场是数据结构场。
T1:树上路径求和,可能需要加个历史版本,感觉比较可做。
T2:子区间绝对众数求和,感觉很毒瘤。
T3:居然是构造题,但是似乎是计算几何这类的东西,应该不可做。
8:20~10:00
先开T1。
打完暴力,发现链可以直接用线段树+特判做。
然后思考一个点的值实际上就是子树内深度+t的所有点的最大值,如果超过的话就是所有叶子的最大值。
满二叉树保证了最大深度不超过log,可以开log个线段树维护,并且可以直接计算出这些节点的编号区间。
细节比较多,调了很久,对拍没问题。
10:00~10:30
打完T2的暴力,试着写a=1或2的情况,没有想法。
10:30~11:00
一开始以为T3需要写个 \(\frac{n^3}{w}\) 的bitset,后来发现直接输出1到m的任意排列就满足构造……
11:00~13:00
在T1和T2间思考,一直到考试结束都没想出来什么。
result:
T1:75 T2:30 T3:20
(T1数据水了,被一车人用 \(O(nq)\)艹过去了……论打分段的坏处)
2.总结
(待upd)
day6
时间安排
8:00~8:20 看题面
今天又是数据结构场。
T1:区间队列push,与非1的数的个数有关,感觉比较不可做。
T2:区间去重排序带权求和(吐槽模数真大),有不少部分分。
T3:区间染色区间查询问题,看上去比较和谐,有没修改操作的分。
8:20~9:30
先开T1。
打完暴力思考是否能 \(n\sqrt nlogn\) 的复杂度,想了很久没结果。
昨晚核酸回来想没有push 1的操作怎么做,也没有想出来结果。
9:30~10:30
先写了T2的暴力。
发现R-L<=300可以树套树,一开始复杂度算错了,写完后跑非常慢,后来发现复杂度是 \(O(nlogn(300+logn))\) ,虽然理论过不掉,但是卡了卡常很接近时间限制,就把命运交给评测机的速度。
接着想答案为区间有值域限制去重和的部分分怎么做,暂时没想法,感觉可以扫描线。
10:30~11:30
先写了T3的暴力。
发现没有修改可以莫队做。预处理出所有相同颜色的区间不同对和,然后打表发现莫队转移的时候维护的是一个类似等差数列的形式,细节很多,调了很久,对拍没问题,复杂度均摊 \(O(n\sqrtn+nlogn)\)。
11:30~13:00
发现T2区间有值域限制去重和可以用扫描线+线段树套主席树做,调到结束也没调出来。
result:
T1:25 T2:0(因为第三个分段MLE整题0分,实际上有30……) T3:40
2.总结
(待upd)
day7
1.时间安排
8:00~8:30 看题面
T1:看上去很毒瘤的树上题,感觉不是很可做,而且暴力也不好打。
T2:计数题,暴力打表有15分,有25分可能是给dp。
T3:数论题,要求的函数看上去没有积性可能要根号分治这类的。
想着先开T1,猜想T1可能有什么结论,画了很久的图没结果。
8:30~9:00
打完T2的暴力。
想了很久怎么dp,没什么想法。
9:00~9:30
打完T3的暴力。
试着用 \(O(8n\sqrtn)\)冲过1e6,跑的很慢……
9:30~10:30
把题目的操作流程倒过来,发现每次只能取被一条路径覆盖的边并删除路径。
打了个 \(n^2logn\) 的暴力,样例没问题。
树剖维护区间加查全局min是很容易的,主要在于维护被覆盖的路径集合。
发现需要获得集合信息的时候集合中只有一条路径,换句话说其他的路径一进一出抵消了,这类问题很容易想到用异或和维护。
打了个树剖, \(O(nlog^2n)\) ,大样例没问题,自己造数据平均跑5s左右,问题不大。
10:30~13:00
自闭看T2,试着写了个复杂度爆炸记搜,结果答案就不对,更不用说优化了。
自闭看T2,T3,给T3卡了卡常,睡了很久……
result:
T1:60(暴力写挂-40) T2:15 T3:30(暴力写挂-20)
(本来能拿rk4硬是被暴力写挂丢了60分……)
2.总结
T1
大部分题解都是树剖,还有lct的,看来自己的想法还是比较大众的。
有一种只用30行代码的hash做法可以回来研究一下。
T2
(待upd)
T3
(待upd)
others
1 . 对自己高档分的代码比较自信就大胆删掉分段吧……第一次被暴力写挂挂这么多分,无大语……
day8
1.时间安排
8:00~8:20 看题面
T1:图上离谱计数题,应该和边双有关,很毒瘤,暴力也不好写。
T2:序列计数题,数据居然是高精范围的,只会暴力15分。
T3:提答,模拟计算机的底层位运算,感觉很有意思。
8:20~9:00
先打了T2的暴力,然后打T1的暴力,但调不出来。
调了很久决定放弃,冲提答。
9:00~13:00
子任务1是构造指定的数,一开始以为爆搜能把搜出来,写了个完全的爆搜后继续调T1,跑了10分钟左右都没结果,发现一堆细节没注意,调了很久还是跑不出来,而且中间电脑给跑崩溃了,仔细算一下搜索量太爆炸了,爆搜行不通。
后来一想,很容易构造出来2和3,然后用左移和或运算可以构造出来答案,写完checker返回9,可以过4分。
后来发现根本没必要构造,只需要取反一次再左移就能得到1和3,同样能构造答案,写完checker返回7,卡了卡返回5,可以过12分。
然后想子任务2的加法。
按照套路拆成与和或相加,然后给寄存器分配5个区域,分别存二进制幂区,与区,或区,答案区,进位区,临时区,刚好386<400能开下。
然后按01分六类,转移有规律,分类讨论即可。
写完发现checker返回137,只能过16分。
卡了很久实现,一直卡到结束只能卡到133,寄。
result:
T1:/ T2:10(不知道为啥一个点没输出) T3:28
2.总结
(待upd)

浙公网安备 33010602011771号