【Atcoder】AGC006 B-F简要题解

B.Median Pyramid Easy

构造题。

x = 1 , 2 N − 1 x=1,2N-1 x=1,2N1必然无解。

否则把 x x x放中间, x − 1 , x + 1 x-1,x+1 x1,x+1放左右,一定有解。


C.Rabbit Exercise

线性的期望可以拆开逐次算:

单独考虑每次操作:
跳跃后 a j a_j aj的期望位置: a j + 1 + a j − 1 − a j a_{j+1}+a_{j-1}-a_j aj+1+aj1aj,发现:

a j + 1 − a j ′ = a j − a j − 1 , a j ′ − a j − 1 = a j + 1 − a j a_{j+1}-a_j'=a_j-a_{j-1},a_{j}'-a_{j-1}=a_{j+1}-a_{j} aj+1aj=ajaj1,ajaj1=aj+1aj

原数列差分得到 b j = a j + 1 − a j b_j=a_{j+1}-a_{j} bj=aj+1aj a j a_j aj的一次跳跃相当于 s w a p ( b j , b j − 1 ) swap(b_j,b_{j-1}) swap(bj,bj1)

那么执行一次 s e t set set后相当于对 b b b进行了一次轮换。

求出所有轮换组。轮换组里找 M M M次轮换后的位置是 O ( 1 ) O(1) O(1)的。


D.Median Pyramid Hard

二分答案,将 &lt; m i d &lt;mid <mid的数看作 0 0 0 ≥ m i d \geq mid mid的数看作 1 1 1

考虑从中间位置不断向两端拓展,若先遇到连续的2个0/1,则最后顶端必然为0/1,否则比较01的个数即可。


E.Rotate 3x3

一些性质:

  • 任何一列的三个数字不会被拆开到不同列中
  • 第二行的数字不会去其他行,第一行和第三行的数字也不会到第二行
  • 原来的奇数列操作后也应该在奇数列,原来的偶数列操作后也应该在偶数列。

发现可以构造操作(记大写字母与小写字母为两种正反状态):

  1. abcde -> CBAde -> CBEDa -> ebcDa -> ebAdC -> aBEdC -> aBcDe
  2. CBAde->abcde -> aDCBe -> cdABe -> cbaDe -> ABCDe -> AbCde(执行上面那串操作)

(懒于构造,直接贴题解

2操作也就是说交换相邻两个奇偶性相同的列且保持正反状态不变时,必然会使得一个奇偶性不同的列正反状态改变。

那么模拟冒泡排序的过程(BIT维护),计算奇数列和偶数列是否能达到目标矩阵的正反状态。
(只需要反的列个数与目标矩阵反的列个数差为偶,因为可以通过1操作达到目标状态)


F.Blackout

把格点 ( x , y ) (x,y) (x,y)看做点 x → x\to x y y y的一条有向边。

则原图的染色相当于由 x → y , y → z x\to y,y\to z xy,yz得到 z → x z\to x zx

发现只有每个弱连通图内的点可能会增加连边。

所以先把边看成无向的,在划分出的每个弱连通图内计算贡献:

基于对图论题目本质的理解,题解中套用一个很妙的方案——三染色:使得红点连向黄点,黄点连向蓝点,蓝点连向红点。

若无法染色,显然图会被连成完全图,贡献为 n 2 n^2 n2

若只能染出 ≤ 2 \leq 2 2种颜色,则不会有新连边,贡献为 m m m

否则设三种颜色点数分别为 c 1 , c 2 , c 3 c_1,c_2,c_3 c1,c2,c3,相应颜色之间的点均可以连边,贡献为 c 1 c 2 + c 2 c 3 + c 3 c 1 c_1c_2+c_2c_3+c_3c_1 c1c2+c2c3+c3c1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值