2022.10,12 ZRnoip20连day3
1.时间安排
8:30~8:40
看题。T1,T2都是签到题,T3大概是组合计数,T4是数据结构,也是标准场。
今天T1,T2比较好写,可以先切掉再看后两题。
8:40~8:50
切T1。虽然可以线性,但是log能过就不想改了。
8:50~9:10
切T2。直接从小到大枚举把网格转成DAG后DP就行,复杂度 \(O(4n^2)\)。
9:10~10:00
先手推了一下T3样例,发现不是很好手算,就写了个暴力打表的程序,用了大概10分钟打出来了5*5的表。
看不出什么规律,但是发现当 \(n=m\) 的时候似乎是0,2,0,2交替的。试着手构了一下n=6,m=6,发现可以归纳构造证明,加上前面暴力一共40分。
试着打更大的表,但是写的暴力跑的很慢,6以内跑了30分钟左右,放弃了。
10:00~13:00
一开始连暴力都不会写,发呆了很久突然意识到就是把原序列用最小代价变成两个等差数列,但是还是不会DP。
感觉公差不会比值域大很多,于是让公差在值域+10范围内枚举,复杂度大概是 \(n^7\) 左右,反正第一档n只有10。
(脑抽把一行的+打成了-,10分也挂没了。)
然后思考这东西怎么拓展,想了一个 \(n^2V^2\) 的DP,但是没有这档部分分,寄。
想这东西怎么优化,然而根本优化不了。
检查前面的题没问题,12点去吃饭后,写其他题去了。
result:
T1:100 T2:100 T3:40 T4:0
2.简要题解
T1、T2:略。
T3:
构造+组合计数。
因为大量的图不方便描述,还是看出题人题解吧。
大体思路是因为题目限制非常强,构造出的状态十分有限,进一步发现 \(n*m\) 的方格只能用若干形如 \(n*k\) 的小方块拼成,于是就变成了一维DP。
T4:
性质+动态中位数(对顶堆)
出题人证明了因为值域只有 \(5e5\) 所以大概范围是 \(n*d\leq2e6\) 。
具体的话设只有一个等差数列是首项是 \(x\), 公差是 \(d\)。
最少操作次数约为:\(\frac{(x*n+\frac{n(n+1)}{2}*d-\sum a_i)}{2}\)。
根据答案上界约为:\(\frac{a_max*n-\sum a_i}{2}+2*n\),可以估算出上面的结论。
还是考虑只有一个等差数列时,令 \(c_i=a_i-(i-1)*d\),则答案可以写作绝对值的和。
不考虑后面奇偶性的部分,前面可以看做带权中位数,可以用数学知识得到应取排序后第 \(\frac{2}{3}n\) 位置上的数,用对顶堆即可实现。
因为考虑奇偶性,而让这个数变大一定不优,所以再考虑这个数-1即可。
这题是两个等差数列,可以正这做一遍前缀的答案,反着做一遍后缀的答案,前缀和后缀拼起来就行了。
复杂度 \(O(n*d*logn)=O(2e6logn)\),需要一些常数优化。
3.反思
1 .
T3lyc很快打出来了10以内的表,观察到了n=m+1在大于5的时候答案都是2,拿到了60分。
自己的打表暴力还是实现的不够优美,不足以看出n=m+1的规律,打表程序也是需要优化的啊。
有群友说盯着打出来的表A了T3,恐怖如斯,更说明了优化打表程序打出更大规模的表有时候能给人更多的启发。
实际上自己的打表程序就差个记忆化和可行性剪枝,这些基础的搜索剪枝还是不能偷懒。
2 .
有时候感性出了一些结论,在这题想不出其他做法并且其他题都拿到了该拿的分,就应该去拼一拼。
给T4剩了三个小时却一分没拿属实不应该,猜到公差不会太大就应该多往这上面想想,也许能想出更多分的做法。

浙公网安备 33010602011771号