Atcoder AGC002 解题报告

(A. Range Product)

简要题意:

计算 (prod_{i=A}^{B} i)的正负号。

题目解法:

只要对负数范围做一做,入门难度,不写了。

(B. Box and Ball)

简要题意:

(N)个盒子,第一个盒子中有一个红球,其他的都有一个蓝球。
(M)次操作,每次操作选两个盒子(i)(j),在(i)中随机选一个球放到(j)中。
问最后红球可能在那些盒子。

题目解法:

注意到我们是可以模拟出每一步之后每一个盒子的球数的。
思考模拟的过程,只要在加上可不可能存在红球这个信息就好了。

(C. Knot Puzzle)

简要题意:

(N)段木头,首尾相接在一起,每一段长度是(l_i)
每次可以选一个总长不小于(L)的一个连续段,选其中一个交界处砍断。
问能否把(N-1)个都砍断。

题目解法:

如果有解,那么一定存在一个(i),使得(l_i + l_{i+1} ge L)
那么我们就让这两个的交界最后砍,剩下的从两边开始,一定都能砍完。
否则显然不行。

(D. Stamp Rally)

简要题意:

一张连通图,(Q)次询问。
每次询问从两个点(x)(y)出发,希望经过的点(不重复)数量等于(z),经过的边最大编号最小是多少。

题目解法:

题意伤。。。注意题目说的是有两个出发点,不规定终止点。。。
好的,那么我们对于每次询问,二分一个边的最大编号,那么就要求在这个子图中,(x)(y)所在的联通块的并集的大小不小于(z),这个可以用并查集做。
多次询问用整体二分就可以了,不过并查集要用按秩合并,支持撤销。

(E. Candy Piles)

简要题意:

桌上有(N)堆糖果,第(i)堆糖果有(A_i)个糖。
两人在玩游戏,轮流进行,每次进行下列两个操作中的一个

  1. 将当前最大的那堆糖果全部吃完
  2. 将每堆糖果吃掉一个

吃完的人输,假设两人足够聪明,问谁能必胜。

题目解法:

按照(A_i)从大到小排序,就构成了一个楼梯形状。
那么两种操作就相当于删掉最下面一行或最左边一列。
对应到坐标系上就是从左下角开始,每次向右或向上走,走出边界就算输。
这个东西可以先打表,发现除了边界那一圈,剩下的都是(SG_{x,y}=SG_{x+1,y+1})
那么我们就只要求出边界上一个点的(SG)就好了,这个扫一遍就行。

(F. Leftmost Ball)

简要题意:

给你(N)种颜色的球,每个球有(K)个。
把这(N imes K)个球排成一排,把每一种颜色的最左边出现的球涂成白色(初始球不包含白色)。
求有多少种不同的颜色序列。

题目解法:

凭直觉,先特判掉(K=1)
合法的序列一定满足任意一个前缀,白色格子的数目不小于颜色数。
所以我们可以据此设计一个(DP),考虑对一种一种的颜色计数:

(dp[i][j])表示序列中已经安排了(i)个白色格子,除了白色,还有(j)种颜色的方案数。

转移就两种:

  1. 新添一个白色格子。
  2. 放置一种颜色的剩下(K-1)个格子。

具体转移要乘一个组合数,也挺好打的。

原文地址:https://www.cnblogs.com/tacmon52818/p/12712962.html