【学习笔记】AGC045
A - Xor Battle
算是比较难的
A
A
A题了,当时降智被卡了半天
显然倒着做,我们知道 A A A必胜的状态,记作集合 S S S。假设此时操作的是 A A A,那么 S ′ S' S′的基等于 S S S的基和 a i a_i ai的并。假设此时操作的是 B B B,注意到 A A A必胜和 B B B必败是等价的,所以 S ′ = { x ∣ x ∈ S , x ⊕ a i ∈ S } S'=\{x|x\in S,x\oplus a_i\in S\} S′={x∣x∈S,x⊕ai∈S}。我们知道 S S S是一个线性空间,如果 a i ∈ S a_i\in S ai∈S那么 T ′ = S T'=S T′=S,如果 a i ∉ S a_i\notin S ai∈/S,假设存在 x ∈ S , x ⊕ a i ∈ S x\in S,x\oplus a_i\in S x∈S,x⊕ai∈S,那么根据线性空间的基本性质有 a i ∈ S a_i\in S ai∈S,显然矛盾,因此 T ′ = ∅ T'=\varnothing T′=∅。线性基维护即可。
B - 01 Unbalanced
大致猜到了做法,但是不会证最后那个结论 雾
问题相当于求
[
0
:
n
]
[0:n]
[0:n]前缀和的极差。考虑限制最大值的上界,在此前提下使得最小值最大。我们希望这个最大值的上界最小,因此二分即可。这个结论结合贪心的过程不难证明,当然如果你和我一样一开始没有把贪心的过程想清楚其实也可以猜到这个结论是正确的
所以我是不是降智了
似乎奇偶性这个地方有一点小细节,改一下就能过了
C - Range Set
感觉这是一道非常套路的
d
p
dp
dp题
不得不说,套路有时候挺管用的,但是每道题都用同一种套路就有一点无聊了吧?
不妨设
A
≥
B
A\ge B
A≥B 挺迷的,第一步要限制一下大小,然后逆向操作,每次可以把连着的
A
A
A个
0
0
0或者
B
B
B个
1
1
1替换成任意字符,如果出现
A
A
A个
0
0
0就肯定赢了 这个应该很显然吧 。那么就把
≥
B
\ge B
≥B的
1
1
1都替换成
0
0
0然后看有没有
≥
A
\ge A
≥A的
0
0
0即可。
这个
d
p
dp
dp令人烦躁 假设我们处理了前
i
i
i个位置,然后要接一段
0
0
0上去,显然可以分成多个阶段去做,如果要接一段
1
1
1上去,但是这一段长度
<
A
<A
<A,那么相当于区间加,如果这一段
≥
A
\ge A
≥A,那么可以先一次性转移
A
A
A个字符,然后再分阶段转移。
复杂度 O ( n 2 ) O(n^2) O(n2)。
其实有点像
D
F
A
DFA
DFA缩小状态数那种感觉,但是我太菜了代码比大佬的复杂了好几倍
最近老是手残,应该去治一治
D - Lamps and Buttons
困难的题目
首先最无脑的策略是,从亮着的灯中任意选一个来撸 因为排列
p
p
p是随机的,然后把这个环里面的灯全部撸完(也就是全部点亮),如果遇到自环就失败了。
但是这样似乎就和每个环里面亮着的灯的数目有关系,因此难以优化。
遗憾的是这道题比较数学所以不能找规律
那我们考虑一些比较脑洞的想法。没办法,这种题只能多尝试
首先我们考虑,直接从 1 1 1到 A A A开始撸(这也是等价的最优策略),让我们先找到第一个 p i = i p_i=i pi=i的位置 t t t。然后对于 [ 1 : t − 1 ] [1:t-1] [1:t−1]这些亮着的灯会把整个环撸完,对于 [ t + 1 : A ] [t+1:A] [t+1:A]的灯初始是亮着的因此最后也是亮着的,对于 [ A + 1 : n ] [A+1:n] [A+1:n]的点所在的环就必须至少有一个 [ 1 : t − 1 ] [1:t-1] [1:t−1]中的点。
然后 [ 1 : t − 1 ] [1:t-1] [1:t−1]不能有自环,这可以用容斥来解决。因此我们可以等价转化为:统计大小为 x + y + z x+y+z x+y+z的排列, ∀ i ∈ z \forall i\in z ∀i∈z, ∃ j ∈ x \exist j\in x ∃j∈x, i i i和 j j j在同一个环中。
接下来是一个固定的套路,但是我之前不太熟悉,不过它看起来非常正确:
将排列看成一个有向图,每次加入一个 i i i,有两种可能:新建一条边 ( i , i ) (i,i) (i,i)或者选择一条边 ( x , y ) (x,y) (x,y),删掉 ( x , y ) (x,y) (x,y)并加上 ( x , i ) , ( i , y ) (x,i),(i,y) (x,i),(i,y)。
这个轮换令人想到斯特林数。。。。
不过这里应该有一步最基本的分析,那就是之前的枚举是 O ( n 2 ) O(n^2) O(n2),因此这里的计算应该是 O ( 1 ) O(1) O(1)的。事实上正解也非常巧妙:考虑在插入 x x x个数后立刻插入 z z z个数,这样 z z z只要不连自环,插在哪里都是合法的。因此方案数为 x ( x + y + z ) ! x + z \frac{x(x+y+z)!}{x+z} x+zx(x+y+z)!。
回过头来反省一下,可能自己连那个转化都想不到吧。对最后那个计数的反应也慢了一点。
__EOF__

本文链接:https://www.cnblogs.com/cqbzly/p/17530021.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」