做题记录

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 背包,上板子即可。

军事行动

很经典的题目,但是没搞出来。

题目给的马走日容易感性理解肯定不会存在两点互相到不了的情况。并且发现 \(n \le 2000\)\(m \le 150\),考虑 \(O(nm^2)\) 的做法。

\(n\) 次的 bfs 肯定是需要的,这个复杂度是 \(O(nm^2)\)。然后我题目就读错了,每次派遣军队可以从已占领的任意位置派遣,这就相当于随意找一个边把 \(n\) 个点连起来。因此题目转换为最小生成树板子,用 \(O(n^2)\) 的复杂度建边排序,用 kruscal 找生成树就行。复杂度 \(O(nm^2)\)

posted @ 2023-10-03 21:38  Nwayy  阅读(27)  评论(0)    收藏  举报
/* 鼠标点击求赞文字特效 */ /*鼠标跟随效果*/