Loading

23.6 杂题 2

CF725F Family Photos*

枚举一下每个照片怎么看,\(a_1-b_2\ge a_2-b_1\) 时一定会 A 先取,B 后取。那先选择对两方都不优的也不一定不选。因为一定要双方都不选才寄了,那么假设 A 选择不选,先后手交换。肯定会选择一个 \(a_1-b_2\) 尽量大的且非负的,B 也是同理的。

之前那个说错了,A 先取更优但是 B 不一定马上取走。考虑这是一个二择问题,我们希望让贡献相同然后就可以排序!让贡献都是 \(\frac{a+b}{2}\),这样只要在一开始加上 \(\frac{a-b}{2}\) 就可以得到正确的贡献!

于是按这个排序即可,显然这样还是满足 \(a_1+b_1\ge a_2+b_2\)

CF1637F Towers*

贪心,最大的当根。

CF618F Double Knapsack*

今年 bj 高考的压轴,被 jzc 说很难。

注意到取某个区间就是合法的,看起来就要抽屉原理。考虑从值域上做文章,对于每个 \(i\) 找到最后一个 \(j\) 使得前者前缀和不小于后者前缀和。

\[sa_i-sb_{j+1}<0\\ sa_i-sb_{j}<b_{j+1}\le n\\ 0\le sa_i-sb_{j}<n\\ \]

\(n\) 种不同的数,\(n+1\) 个数,必然有相同的。

CF1637H Minimize Inversions Number*

https://www.cnblogs.com/zcr-blog/p/17513239.html

CF1408H Rainbow Triples*

数据结构也太不数据结构了!

考虑让限制松一点,假设总共有 \(m\)\(0\)。对于一个位置,如果它左边有 \(\frac{m}{2}\)\(0\),那它只用考虑右边的限制。这种约束很像一个匹配模型,可以建出一个最大流模型。

而最大流=最小割,考虑一种优化思想——模拟最小割。肯定是割源点到颜色的边或者最后汇点到 \(0\) 的边,枚举一段 \(0\) 的前缀,可以得到颜色的一些点肯定得割,一些和后面的 \(0\) 有关。枚举后面一段割啥,可以算出答案。用线段树优化这个过程。

CF963D Frequency of String

一个可能经典的结论:所有不同的长度之和为 \(m\) 的字符串的 endpos 集合大小之和是 \(O(n\sqrt{m})\)

证明:对于长度为 \(L\) 的不同字符串,肯定不可能有相同的 endpos,所以集合大小是 \(O(n)\)。而最多只有 \(O(\sqrt{m})\) 种长度。

然后暴力就好了。

CF1411G No Game No Life

猜它是一个 multi-sg,只用算出每个位置的 sg 值。不过注意到这是一个图,你要求 mex 肯定不会太大,毛咕咕一下不会超过 \(\sqrt{m}\)。并且根据均摊,你求 mex 的复杂度是 \(O(m)\) 的。接下来相当于你有一个数 \(v\) 每次选一个点异或上它的 sg 值,求最后是 \(0\) 的概率。枚举这个过程一共进行了 \(i\) 轮,每一轮相当于一个异或卷积,令 \(F\) 是 sg 值为 \(i\) 的概率的生成函数。有:

\[ans=1-[x^0]\frac{\sum_{n\ge 1}F(x)^{n}}{n+1} \]

注意到异或卷积是线性变换,你要求逆等价于 fwt 之后求逆再 ifwt 回去。于是有逆的充分必要条件即为 fwt 之后任意一位不是 \(0\)。下面来证明这道题符合条件。

思考 fwt 的本质,是在做一个容斥,每一项的系数是 \(\pm 1\),而所有的总和是 \(\frac{n}{n+1}\)。于是一个 \(F\) 在 fwt 之后的范围是 \([-\frac{n}{n+1},\frac{n}{n+1}]\)。而取反后加 \(1\) 的范围就是 \([1-\frac{n}{n+1},1+\frac{n}{n+1}]\) 一定不为 \(0\)

CF1393E2 Twilight and Ancient Scroll

显然有一个 \(|S|\log |S|\) 的 dp 做法,但是瓶颈在给字符串排序。也就是真正的瓶颈在于求 lcp。AFewSuns 给出了一种不需要科技的做法,orz。

第一个排序的部分,令 \(t_{i,j}\) 代表第 \(i\) 个字符串去掉第 \(j\) 个字符后的字符串,要给所有 \(t_{i,j}\) 排序。注意到相同颜色段是可以缩起来的,从后考虑每个连续段和下一个连续段,设为 \(c_1,c_2\),如果 \(c_1<c_2\),那么删去一个 \(c_1\) 肯定是不优的,同理删去 \(c_1\) 后比任意一个后面的都不优,所以删 \(c_1\) 一定是在最后面,对称的 \(c_1>c_2\) 就在最前面。

现在比较完了同一字符串,接下来比较的是两个相邻的字符串。分类讨论删去的是 \(j,k\),如果 \(j\le k\),分成了三个部分。\([1,j-1],[k+1,n]\) 这两个部分都可以预处理 lcp,中间部分也可以预处理错位 lcp。\(j\ge k\) 也是类似的,但是分类讨论比较麻烦。

好像讨论完这些也没什么细节了。

CF1815E Bosco and Particle

有个粒子初始在 \(0\) 位置,\(1\cdots n\) 位置分别为有一个对撞器,如果在 \(0\) 位置则向右,如果在 \(n + 1\) 位置则向左。每个对撞器有一个 \(01\) 串,初始所有对撞器的指针都在开头,当粒子走到 \(i\) 位置时,对撞器所指的值为 \(0\) 则不改变方向,否则反向,指针指向下一个位置,如果在串的末尾则指向开头。求最小的周期长度 \(c\) 满足任意 \(t\) 时间和 \(t + c\) 时间粒子在同一位置。

\(1\le n \le 10^6\)\(\sum |s_i|\le 10^6\)


注意到对于一个位置,无论在右边转了多久,回到这里后和直接从右边回来是一样。左边同理。所以我们只用考虑 \(0,1,2\) 这三个位置。

还有一个显然的事实是每个粒子只用保留它的最小整周期,然后你就可以跑一个暴力,求出一个周期从左边进入 \(a_i\) 次,往右边走出去 \(b_i\) 次。显然这个过程是对称的。

\(f_i\) 代表最后过程中 \(i\to {i+1}\) 的次数,由于左边和右边会右七七八八的破事,所以 \(i\) 这个位置可能进进出出多个周期,所以应该 \(\frac{f_i}{f_{i+1}}=\frac{a_i}{b_i}\)。使用主元法,用 \(f_0\) 表示出所有 \(f_i=f_0\prod_{j=1}^{i}\frac{b_j}{a_j}\)。我们需要构造这个 \(f_0\) 使得每一个 \(f_i\) 是整数,并且 \(b_i\mid f_i\)。根据每个质因子考虑,随时把不够的部分补进 \(f_0\) 里。不妨设 \(b_n\not=0\),统计这一部分即可。

posted @ 2023-06-28 23:50  Semsue  阅读(15)  评论(0编辑  收藏  举报
Title