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\),则答案可以写作绝对值的和。

\[ans=\sum_{x<c_i}|x-c_i|+\sum_{x>c_i}\lceil\frac{|x-c_i|}{2}\rceil+\sum_{x>c_i}(|x-c_i|\mod 2) \]

不考虑后面奇偶性的部分,前面可以看做带权中位数,可以用数学知识得到应取排序后第 \(\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剩了三个小时却一分没拿属实不应该,猜到公差不会太大就应该多往这上面想想,也许能想出更多分的做法。

posted @ 2022-10-12 17:03  Displace  阅读(25)  评论(0)    收藏  举报