CF1948 | 似梦

CF1948 | 似梦

闲来无事,vp 一下。

A.

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

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

B.

一开始读错题了。 /tx

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

C.

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

dp,fi,j 表示 (i,j) 是否可达。

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

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

D.

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

E.

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

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

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

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

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

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

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

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

这容易做到。

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

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

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

具体地,对于编号在 [l,l+k) 中的点,取 mid=l+k2,按 mid,mid1,,l,l+k1,l+k2,,mid+1 的顺序降序放置 [l,l+k) 即可。

F.

计数简单。

先考虑一个询问怎么做。

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

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

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

枚举差量把不等式转成等式,有式子:c=kd=0(yd)(xc+d)

由下指标反演推论,后面那个求和式是 (x+yy+c)

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

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

容易做到 O(n+q)

G.

转化还是挺好的。

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

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

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

用 Prim 实现,复杂度 O(2nn2)

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

posted @   BK0717BK0717  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示