【Atcoder】AGC001简要题解

96 篇文章 0 订阅
32 篇文章 0 订阅

A.BBQ Easy

排序后类似于括号匹配,使得左括号的价值总和最大, n 2 d p n^2dp n2dp即可。

upd.智障了,直接贪心相邻两个一组即可。


B.Mysterious Light

实际上就是用顶角为 60 ° 60\degree 60°平行四边形的短边分割,迭代剩下的小平行四边形即可。

f ( x , y ) f(x,y) f(x,y)表示长边为 x x x,短边为 y y y内部切割的代价: f ( x , y ) = f ( y , x % y ) + 2 ⋅ ⌊ x y ⌋ ⋅ y f(x,y)=f(y,x\%y)+2·\lfloor\frac{x}{y}\rfloor ·y f(x,y)=f(y,x%y)+2yxy,底层为 f ( x , 0 ) = − x f(x,0)=-x f(x,0)=x

a n s = f ( x , n − x ) + n ans=f(x,n-x)+n ans=f(x,nx)+n


C.Shorten Diameter

n ≤ 2000 n\leq 2000 n2000明示 n 2 n^2 n2枚举中点删去距离 > ⌊ K 2 ⌋ >\lfloor\frac{K}{2} \rfloor >2K的点再取 m i n min min
p.s. K K K为奇时中点是一条边。


D.Arrays and Palindrome

很妙的构造题

问题等价于:求解是否存在一种将回文串对应字符相连的方式(所有点的度数 ≤ 2 \leq 2 2),使得图连通。

连通图必然是一个环或者链,所以若存在至少三个 A i A_i Ai为奇则无解。

分情况讨论:

  • m = 1 m=1 m=1时,将前 ⌊ n 2 ⌋ + 1 \lfloor\frac n2\rfloor+1 2n+1个字符划分成一个串,其余划分成一个串。分 n % 4 n\% 4 n%4的值画图讨论一下就可以证明。
  • A i A_i Ai均为偶时,按 [ 1 , A 1 + 1 ] , [ A 1 + 2 , A 2 + 1 ] , . . . , [ A m − 2 + 2 , A m − 1 + 1 ] , [ A m − 1 + 2 , n ] [1,A_1+1],[A_1+2,A_2+1],...,[A_{m-2}+2,A_{m-1}+1],[A_{m-1}+2,n] [1,A1+1],[A1+2,A2+1],...,[Am2+2,Am1+1],[Am1+2,n]划分。起点终点分别是首尾字符串的某个中心。
  • 存在至多 2 2 2 A i A_i Ai为奇时,将为奇的 A i A_i Ai放在首尾(中心作为链的一段)。

E.BBQ Hard

i , j i,j i,j搭配的方案数为 ( A i + B i + A j + B j A i + B i ) {A_i+B_i+A_j+B_j\choose A_i+B_i} (Ai+BiAi+Bi+Aj+Bj),等价于从 ( − A i , − B i ) (-A_i,-B_i) (Ai,Bi)只能向上/右走到 ( A j , B j ) (A_j,B_j) (Aj,Bj)的方案数。

N ≤ 200000 , A i , B i ≤ 2000 N\leq 200000,A_i,B_i\leq 2000 N200000,Ai,Bi2000可知需要把搭配拆成枚举定点直接所有点和它搭配的贡献。 d p [ i ] [ j ] dp[i][j] dp[i][j]表示走到 ( i , j ) (i,j) (i,j)的方案。最后除去多算的贡献。


F.Wide Swap

只会逐位迭代的做法。

实际上用到了比较套路的转换:设 b a i = i b_{a_i}=i bai=i,则序列 b b b中相邻位置差值 ≥ k \geq k k的可以 s w a p swap swap,且 b b b的字典序等价于 a a a

对于 i &lt; j , ∣ b i − b j ∣ &lt; k i&lt;j,|b_i-b_j|&lt;k i<j,bibj<k,相对位置是固定的,考虑连边拓扑排序。
边的量级是 n 2 n^2 n2的,考虑优化:对于都 &gt; b i &gt;b_i >bi或都 &lt; b i &lt; b_i <bi的需要连边的 x , y x,y x,y,实际上 x , y x,y x,y内部的相对位置已经由它们之间的连边确定了,所以 i i i只需要连向 ( b i , b i + k ) (b_i,b_i+k) (bi,bi+k) ( b i − k , b i ) (b_i-k,b_i) (bik,bi)中离 i i i最近的点即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值