【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最近的点即可。

AtCoder Beginner Contest 134 是一场 AtCoder 的入门级比赛,以下是每道题的简要题解: A - Dodecagon 题目描述:已知一个正十二边形的边长,求它的面积。 解题思路:正十二边形的内角为 $150^\circ$,因此可以将正十二边形拆分为 12 个等腰三角形,通过三角形面积公式计算面积即可。 B - Golden Apple 题目描述:有 $N$ 个苹果和 $D$ 个盘子,每个盘子最多可以装下 $2D+1$ 个苹果,求最少需要多少个盘子才能装下所有的苹果。 解题思路:每个盘子最多可以装下 $2D+1$ 个苹果,因此可以将苹果平均分配到每个盘子中,可以得到最少需要 $\lceil \frac{N}{2D+1} \rceil$ 个盘子。 C - Exception Handling 题目描述:给定一个长度为 $N$ 的整数序列 $a$,求除了第 $i$ 个数以外的最大值。 解题思路:可以使用两个变量 $m_1$ 和 $m_2$ 分别记录最大值和次大值。遍历整个序列,当当前数不是第 $i$ 个数时,更新最大值和次大值。因此,最后的结果应该是 $m_1$ 或 $m_2$ 中较小的一个。 D - Preparing Boxes 题目描述:有 $N$ 个盒子和 $M$ 个物品,第 $i$ 个盒子可以放入 $a_i$ 个物品,每个物品只能放在一个盒子中。现在需要将所有的物品放入盒子中,每次操作可以将一个盒子内的物品全部取出并分配到其他盒子中,求最少需要多少次操作才能完成任务。 解题思路:首先可以计算出所有盒子中物品的总数 $S$,然后判断是否存在一个盒子的物品数量大于 $\lceil \frac{S}{2} \rceil$,如果存在,则无法完成任务。否则,可以用贪心的思想,每次从物品数量最多的盒子中取出一个物品,放入物品数量最少的盒子中。因为每次操作都会使得物品数量最多的盒子的物品数量减少,而物品数量最少的盒子的物品数量不变或增加,因此这种贪心策略可以保证最少需要的操作次数最小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值