做题记录

发布时间 2023-10-03 21:43:28作者: Nwayy

P8773 [蓝桥杯 2022 省 A] 选数异或

这个是刷数据结构时刷到的,感觉是个好题。

要求异或和为 \(x\),那么我们可以通过 \(x \oplus a_{i}\) 往前找我们想要的另一个值,假设其位置记为 \(nxt_{i}\),那么只有同时满足 \(l \le i \le r\) 并且 \(l \le nxt_{i} \le r\) 时才有解。由于 \(nxt_{i} \le i\),所以我们要尽量让 \(nxt_{i}\) 大,所以考虑对序列的 \(nxt\) 数组建一个 ST 表,维护区间 \(nxt\) 最大值,当区间 \([l,r]\)\(nxt_{i}\) 最大值 \(\ge l\) 时则表示有解。

复杂度 \(O(n \log n+q)\)

ABC320D

这种根据某些点得到其他点信息的题目不用多想,直接建双向边 bfs 向外扩展就行了,并查集和什么拓扑都是不行的,因为你无法确定往哪个方向扩展。

组队 team

学校 OJ 的题目,容易把题目转换为二进制进位的题目,但其实没什么用。

注意到每种最多只有 \(2\) 个,也就是意味着一旦某个点断开前面所有都无法构成最终的 \(2^{k+1}\),所以一旦遇到不连续的情况,立刻把 \(ans\) 清为 \(1\),否则若此次数为 \(2\),那么把 \(ans\) 乘二即可。

比赛 match

考虑一个经典 trick:求这种类似区间 0/1 个数的,我们把把题目改为 \(-1\)\(1\),这样一旦有一组即和为 \(0\),这样子转换模型可以用前缀和、最大子段和等经典问题来解决。

卡牌 card

题目给的操作看上去就不可做,但其实是诈骗。

仔细想想就能发现我其实可以随意调换卡片位置,例如我不想花堆顶这张牌我只需要把它放到堆底去即可。所以问题转化成每次花 \(L_{i}\) 代价得到价值为 \(D_{i}\) 的东西,加上 \(n \le 1000\) 的范围,容易想到这是个 01 背包,上板子即可。