NOIP2022 题解
A.种花
有的人把名字写进题面,想“不朽”。
签到题。枚举 c 和 f 的最左边那一列的位置,然后做一个类似前缀和的东西。
B.喵了个喵
压轴题。
首先 \(k=2n-2\) 有一个非常好想的思路,对于前 \(n-1\) 个堆,每个堆就放两个颜色,如果出现一个重复颜色,如果他在堆底,利用第 \(n\) 个堆并以此操作2把它消掉,否则放在那个堆顶自然就消掉了,我们称 \(n\) 号堆为“特殊堆”,其他的为“普通堆”
那么把这个做法推广到 \(k=2n-1\),那么只有在普通堆都被填满的时候才会出问题,不妨设普通堆满的时候要填的是 \(k\),这个时候我们分类讨论。
我们先找到卡片中下一张目前不在普通堆顶的颜色,提取出这一段颜色区间为 \(a_0=k,a_1,a_2,a_3,\cdots,a_t\)。\(a_t\) 要么是在普通堆底,要么是 \(k\)。
- 如果他是 \(k\),那么 \(a_0\) 放在特殊堆,\(a_t\) 分别放在对应颜色的堆顶直接消掉。
- 如果他在普通堆底,这个时候继续分类讨论
- 如果 \(a_1,a_2,\cdots,a_{t-1}\) 没有一个在 \(a_t\) 这个堆的堆顶,那么把 \(a_0\) 放在 \(a_t\) 的堆顶,\(a_1,a_2,\cdots a_{t-1}\) 依次放到堆顶消掉,然后最后利用特殊堆和操作2把 \(a_t\) 消掉,这样一来,特殊堆还是没有元素,普通堆每个堆还是两个元素。
- 如果 \(a_1,a_2,\cdots,a_{t-1}\) 有在 \(a_t\) 的堆的堆顶,那么把 \(a_0\) 放在特殊堆,其他的都利用操作1消掉,这样原来 \(a_t\) 所在的堆变空了,特殊堆里有一个 \(a_0\),这个时候我们把特殊堆改变一下依然满足此前的性质。
这样一来实现这个构造就不难了,但是有很多细节,一个比较重要的细节是维护可以选的普通堆的时候,在最后一小类中,在 \(a_t\) 上面那个元素被消掉的时候,这个堆是不能选的。
C.建造军营
一眼边双缩点,然后变成一棵树,然后经典 \(f[i][0/1/2]\) 表示 他子树里一个点都没有/他子树里和子树外都有点/他子树外一个点都没有 的方案数
D.比赛
一眼离线扫描线,然后维护矩阵,卡常。(小常数选手子达哥表示不需要卡常)
或者也可以利用变量维护就不需要卡常了。