CF1948 | 似梦

CF1948 | 似梦

闲来无事,vp 一下。

A.

只有连续段才能提供恰好两个。

所以奇数一定无解,偶数只要形容 OOPP... 重复放就行。

\(\color{green}{\checkmark}\)

B.

一开始读错题了。 /tx

从后往前考虑,如果当前序列末尾加入后满足递增就直接加入(贪心地想,这样上界是最大的),否则就必须要拆掉做子问题。

\(\color{green}{\checkmark}\)

C.

首先发现我们主动的走不会往左走。

dp,\(f_{i,j}\) 表示 \((i,j)\) 是否可达。

按纵坐标作为阶段转移即可。

好像能直接 BFS,但是其实差不多。

\(\color{green}{\checkmark}\)

D.

枚举重复串的半径,check 相当于在 01 序列上求极长连续段。

\(\color{green}{\checkmark}\)

E. \(\color{#DB7D74}{\star}\)

被结论题创飞了,被数据范围骗光了。

由于和曼哈顿距离相关,尝试将 \((i,a_i)\) 扔到平面直角坐标系上。

考虑一些局部的性质:一个团有何特点。

首先是其中点对间最大曼哈顿距离不超过 \(k\)

其次,其在 \(x\) 轴和 \(y\) 轴上的投影一定是连续的一段区间。

再而,其大小必然不超过 \(k\)

容易感性理解,证明亦不难(详见这篇题解)。

自然尝试让每个团大小为 \(k\)(最后一个团可能达不到 \(k\))。

这容易做到。

我们考虑一个正方形,其对角顶点的曼哈顿距离为定值。

只需让其他点被这个正方形包含即可。

把正方形的一条对角线垂直水平方向,定值取 \(m\),让剩下的点在正方形的一组对边上即可。

具体地,对于编号在 \([l,l+k)\) 中的点,取 \(mid = l + \frac k2\),按 \(mid, mid-1, \dots, l, l+k-1, l+k-2, \dots, mid+1\) 的顺序降序放置 \([l,l+k)\) 即可。

\(\color{green}{\checkmark}\)

F.

计数简单。

先考虑一个询问怎么做。

我们发现问题可以化归到一边有 \(x\) 个银币,另一边有 \(y\) 个,求 \(x\) 个银币的价值比另一边多 \(k\) 的概率。

先乘上总方案数,把概率转成方案数。

我们关心 \(x\) 个银币中有几个是 \(1\),这是一个组合数。

枚举差量把不等式转成等式,有式子:\(\sum\limits_{c=k}\sum\limits_{d=0}\binom yd \binom x{c+d}\)

由下指标反演推论,后面那个求和式是 \(\binom{x+y}{y+c}\)

对下指标求缀和是没法好好做的。

但是关注到 \(x+y\) 是一个定值,所以只需我们预处理出上指标为 \(x+y\) 时的下指标后缀和即可。

容易做到 \(O(n + q)\)

\(\color{green}{\checkmark}\)

G. \(\color{#DB7D74}{\star}\)

转化还是挺好的。

考虑树的最大匹配是什么,往二分图方面考虑,二分图最大匹配 \(=\) 最小点覆盖

那我们枚举最小点覆盖集合再跑 MST 即可。

注意此时生成的 MST 只需保证枚举的点覆盖集合是合法点覆盖集合即可。相当于钦定若干条边不选。

用 Prim 实现,复杂度 \(O(2^n n^2)\)

还有一个做法,是把二分图最大匹配转化为点数减去最大独立集。然后枚举独立集,是类似的。

\(\color{green}{\checkmark}\)

posted @ 2024-04-06 06:59  BK0717BK0717  阅读(38)  评论(0)    收藏  举报