hydd的博客

博客

(Mirror) 联合省选 2021 游记

2021-04-25 13:06:58 By hydd

游记

Day1

开场看了看题目:

  • $T1$ 看上去比较经典,应该不难;
  • $T2$ 的这个式子有点类似于 $CF461D$ ?但是做法应该完全不一样,因为条件和符号差别很大;
  • $T3$ 感觉是个难题,想不到模拟以外的做法。

$T1$

首先感觉是二分答案,因为极差和最小值两个东西不好同时处理。

之后写了个枚举 $a$ 的左端点,但是查出错了,就写了枚举最小值和最大值,外面有个排序。

时间复杂度 $O(n \log n)$,应该没啥问题。期望得分 $100$。

$T2$

先将 $b$ 第一行和第一列当成 $0$ 的 $a'$ 算出,再算第一行和第一列对 $a$ 的贡献,算出来的式子应该类似于 $a_{i,j}=(-1)^{x(i,j)}a_{1,i}+(-1)^{y(i,j)} a_{j,1}+(-1)^{z(i,j)}a_{1,1}+a'_{i,j}$。$x,y,z$ 是关于 $i,j$ 的函数。

又因为知道 $0\leq a_{i,j}\leq 10^6$,就有若干个不等式。但是不等式是三元的,没有很好的处理方法。

我现在手上唯一能解不等式的只有差分约束,但是必须得是二元,且二元的系数分别为 $1,-1$。

考虑将 $a_{1,1}$ 也用二元的式子表示,可以将 $a$ 加入第零行和第零列,并钦定 $a_{0,0}=0$,其它新加的位置没有任何限制。

可以发现,对于原来 $a$ 的任何第一行第一列的取值,都有对应的第零行第零列的取值。

于是就变成了二元的,现在的式子类似于 $a_{i,j}=(-1)^jA_i+(-1)^iB_j+a'_{i,j}$,虽然是二元的,但是系数可能不是 $1,-1$。

考场上感觉可以将不等式加减,改变系数,但是显然不等式加减会将约束放宽,但我当时并没有想到,以为和整式消元一样。。。写完发现过不了样例,调了很长时间,才发现不能加减。

最后只能去写暴力,写了个 $m=2$ 的,做法大概是设 $a_{1,m}=x$,然后直接手动解不等式,时间复杂度 $O(n)$。考完才知道输出写错了。期望得分 $0$。

$T3$

$T2$ 花的时间太长了,所以只写了一个模拟。

期望得分 $16$。

Day2

开场看了看题目:

  • $T1$ 感觉是个难题,树上的链的奇怪题;
  • $T2$ 有个状压的做法,复杂度很高;
  • $T3$ 感觉是个难题,支配这个概念以前没有接触过。

$T1$

首先没啥思路,看了看部分分,有一个是一条链,开始的思路是分块,后来想到可以用奇怪的单调队列(?),复杂度 $O(n\log n+q\log n)$。

之后就想其它部分分,想到了二分+暴力跳,复杂度 $O(nc+qc\log c)$。期望得分 $70$?

当时也想过优化暴力跳,但是不知道怎么找上一个颜色为 $c$ 的,以为必须要 $O(nc)$ 预处理。考完才发现可以离线下来边做边求或树剖。

$T2$

写完 $T1$ 部分分花了很长时间,第一次看 $T2$ 的时候还把题看错了,只能做到 $O(2^nn^2m^2)$,优化了半天,才发现过不了样例。

看了看样例解释,发现题看错了,那么可以做到 $O(2^nn^2m)$,常数特别小($\frac 14$,应该还更小),就写了一下,再写了一个 $O(n!\times n)$ 检查。

期望得分 $100$。

$T3$

看了看题,先写了一个 $O(qn^2)$ 的大暴力。

后来再分类讨论了一下一棵树的情况,写了一个倍增,$O(n\log n+q\log n)$。

期望得分 $45$。

总结

思考还要更全面,不能在一个思路上陷得太深。如果陷深了,发现错了,还要调整好心态。

  • $day1T2$,发现不等式加减不能做的时候,可以去想能不能凑系数,而不是直接自闭去打暴力。
  • $day2T1$,找上一个颜色为某个值的,离线就是 $O(1)$ 的,但是当时却没有想到离线,而一直就是在线回答询问。

大概就是:

  1. 原来的思路类似于 $dfs$,相当于往一个思路一直走下去,直到不行再往回退,退得太多了就放弃了。
  2. 现在要把它改成 $bfs$,考虑多种可能可行的解决方案,看哪一种可以做,不能做就换。但是不要随便放弃一个思路。

以 $day2T1$ 为例,可以先把可能的解法列出来,像这种树上的链,不带修改的问题,做法有:倍增、树剖,点分治。

  • 如果往点分想,容易得到一个通过线段树维护的做法;
  • 如果往倍增想,能得到一个二分的做法,当时是往倍增想了,但是稍微想了一下就放弃了这个思路;
  • 如果往树剖想,能得到一个加倍增的做法。

这个 $day1T2$ 往不等式加减想实在是太傻了,但是当时就是陷进去了。看来还是要补一下数学,可以再学学文化课换换思维。

OI方面,还是先把基础的算法做扎实吧。

评论

暂无评论

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。