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\)个糖。
两人在玩游戏,轮流进行,每次进行下列两个操作中的一个
- 将当前最大的那堆糖果全部吃完
- 将每堆糖果吃掉一个
吃完的人输,假设两人足够聪明,问谁能必胜。
题目解法:
按照\(A_i\)从大到小排序,就构成了一个楼梯形状。
那么两种操作就相当于删掉最下面一行或最左边一列。
对应到坐标系上就是从左下角开始,每次向右或向上走,走出边界就算输。
这个东西可以先打表,发现除了边界那一圈,剩下的都是\(SG_{x,y}=SG_{x+1,y+1}\)。
那么我们就只要求出边界上一个点的\(SG\)就好了,这个扫一遍就行。
\(F.\ Leftmost\ Ball\)
简要题意:
给你\(N\)种颜色的球,每个球有\(K\)个。
把这\(N \times K\)个球排成一排,把每一种颜色的最左边出现的球涂成白色(初始球不包含白色)。
求有多少种不同的颜色序列。
题目解法:
凭直觉,先特判掉\(K=1\)。
合法的序列一定满足任意一个前缀,白色格子的数目不小于颜色数。
所以我们可以据此设计一个\(DP\),考虑对一种一种的颜色计数:
设\(dp[i][j]\)表示序列中已经安排了\(i\)个白色格子,除了白色,还有\(j\)种颜色的方案数。
转移就两种:
- 新添一个白色格子。
- 放置一种颜色的剩下\(K-1\)个格子。
具体转移要乘一个组合数,也挺好打的。