像潮落潮涌,送我奔向自由。|

寂静的海底

园龄:3年2个月粉丝:59关注:15

ARC146补题记录

这场ARC貌似是我在 08/29 的时候补的 , 感觉很牛逼,相较于平时从C开始就是上来扔个结论到你脸上的ARC要友好的多,至少更贴近OI的风格吧,然后因为整个人烂在家里,就拖了两天才写。


A

给你一堆数,选三个拼起来求最大值。

选最大的三个数咋拼试一遍就行。

引申问题:一堆数咋拼最大 。

字典序大的放前面,但是如果有一个数是另一个数的前缀呢

直接比较 a_bb_a 大的放前面肯定不劣。

复杂度 O(n)


B

给你一堆数 105 个 , 你可以进行加操作 Ai++ 不超过 M 次,使得 maxSA,|S|=kANDpsp 最大。

首先高位对低位时绝对优秀的,所以按位贪心,从高到低考虑每位是否可以是1,需要是1的话就是能够选出一些是目前数的二进制超集的数或一些离下一个满足条件的数尽可能小的数即可了。

计算下一个满足条件的数从高到底考虑每一位,直到遇到第一位满足想要得到的是 1 , 但是这一位是 0 , 那么直接把这一位改过来就行了,后面原封不动搬下来。

求前 K 小的和可以用快排 。

复杂度 O(nlog2A)

使用 bitset::Find_first() 可以优化至 O(nlogA)

但是三个 log 都能过。

算比较难的 B 了。


C

啥几把题,卡了半天,一直认为是数位 dp 之类的东西,直到有人提醒从集合大小来考虑。

才发现不可能存在大小大于 n+1 的 Even XOR , 理由如下:

由于神奇几把原理,一个集合的奇数大小子集和偶数大小子集是个站一半的,又因为偶+偶=偶,所以这些集合的值必须两两不同,共 2siz1 种 , 所以 sizn+2 时必然无解。

然后就从集合大小角度考虑问题了,

f(x) 表示大小为 x 的 Even XOR 集合的数量,那么有

f(0)=1,f(x)=f(x1)(2n2x1)1x

因为 大小为 x 的集合包含的 2x1 种奇子集的 XOR 已经不能有了 , 所以是上式种,乘 1x 是消序。

答案即 f(x)


D

可能是我脑子不好使,也可能是波特们太强了,大家都切了这道题,我看了半天想各种构造,转图论,2sat,几把东西,完全不会,当时又急,只好看题解。

题解:

把条件拆成 xpAxqB 的形式, 然后从 A={1,1,,1} 开始 “松弛” (这个次是我自己想的,像最短路松弛一样,不知道适不适合) , 如果需要更新就塞到队列里,总复杂度是 O(n+q) 的。

一些理解:

由于这个关系是“正向的”,即不会出现一个大于了某数要求另一个小于某数,所以这种“松弛”是正确的。

本来可以给所有数都赋成0,这是满足条件的,

所有数都需要 1 , 那么就从这个数需要 0 代表这另一个条件就必须不成立,这样一路松弛下去结果一定是最小的。

果然大家都是波特啊。。。


E

牛逼逼题。

但我急 /fn

首先发现序列的总长是非常大的,和矩阵快速幂之类的东西也没啥几把关系,肯定就不能从序列的角度进行 dp 了,于是从值域角度进行 dp 。

从小到大把每种数放进去。

自己想到了类似连续段 dp 的做法 , 但是不太会处理快速转移 , 想到了枚举新建的连续段的数量和合并的连续段的数量,也发现了两者的差是定值,但是完全没有想过不考虑合并这些操作,只是考虑插板的相对位置 。

fi 表示两个端点都没有被钦定,有恰好 i 个连续段的方案数。

gi 表示端点被钦定一个, 有恰好 i 个连续段的方案数。

hi 表示端点都被钦定了, 有恰好 i 个连续段的方案数。

有转移

f,g,h 表示新的 f,g,h

fAi=fi(A1j)

gAi+1=fi(A1j1)2+gi(A1j1)

hAi+2=fi(A1j2)+gi(A1j2)+hi(A1j2)

波特们都说这题神仙在状态数是 O(n) 的,转移很简单。

我反而觉得状态数 O(n) 挺显然的 , 转移才是妙点。

就拿 ff 来举例子。

转移到的目标是 Ai 很好理解。

就是你得在每个原来的段两边都得有两个目前的数才行,这样你就有了 j 段 , 再把其它 n2j 个加进去就是 nj 段 ,这时候合并两个段就是拿一个中间的走 ,由于要把目前的数全部放完,就得新建一个段,所以总段数仍然是 nj

这个系数的来源是这样的。

考虑先放了 j+1 数进每个段的右边以及最左边段的左边 , 现在还剩 Aj1 个数 , 要把这些数插到 j 段形成的 n+1 个集合,所以方案数是 (A1j)

Q:为什么插板的组合意义和连续段是一一对应的?

A:现在的假设下,所有段都被合并成了一段,在最左、最右插数,实际意义是在最这里新建,在其它位置插板第一次是将这里“断开”成两个连续段 , 即选择不合并,后面再插板即是新建。

其它式子的组合意义类似。

Q:为啥显然 dp 的状态是 O(n) 的。

A:

考虑归纳

Si=AiSi1

对于每个时刻。

显然 f 的取值只有一种 Sigf 转移过来的值只有Si+1

假设以及证明了之前的取值只有 Si,Si+1

那么这一步也只会产生 Si,Si+1 , 最开始又只有 Si+1

h 的证明同理。


F

你指望我做 tourist 没做的题 ?

爬吧。


Summ

感觉这场意义蛮大的,学到的东西挺多,还有让我发现了自己有多急。。。。。。

剩的题蛮多的,打会球,先去补 NOI 了。

我才不是波特!

posted @   寂静的海底  阅读(4)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起