Atcoder AGC006 解题报告
\(A.\ Prefix\ and\ Suffix\)
简要题意:
给出长度为\(N\)的字符串\(S\)和\(T\),求一个字符串满足:
- 长度至少为\(N\)
- 前缀为\(S\)
- 后缀为\(T\)
请找出长度最短的这样的字符串并输出他的长度
题目解法:
数据范围很小,直接枚举判断就好了。
\(B.\ Median\ Pyramid\ Easy\)
简要题意:
给出一个\(N\)层的方格金字塔,自顶向下依次标号为第\(1\)到第\(N\)层。
其中第\(i(1 \le i \le N)\)层有\(2i − 1\)个方格。
第\(N\)层有一个\(1\)到\(2N-1\)的排列,其他层的数字按以下规则生成:
方格\(b\)中填写的整数,是方格\(b\)正下方,左下方和右下方方格中所写整数的中位数。
现在请你构造出一组第\(N\)层的数字,使得求得的第一层的数字为\(X\)。
题目解法:
容易发现,如果某一层出现了中间的两个格子是同样的数字,那么一直到顶,都是这个数字。
那么,我们除了\(1\)和\(2N-1\),都可以构造出来了,而这两个数显然无解。
\(C.\ Rabbit\ Exercise\)
简要题意:
有\(N\)只兔子在一个数轴上,兔子为了方便起见从\(1\)到\(N\)标号,第\(i\)只兔子的初始坐标为\(x_i\)。
兔子会以以下的方式在数轴上锻炼:
一轮包含\(m\)个跳跃,第\(j\)个是兔子\(a[j](2 \le a[j] \le N−1,a是给出的长度为m的数组)\) 跳一下,这一下从兔子\(a[j]− 1\)和兔子\(a[j] + 1\)中等概率的选一个(假设选了\(x\)),
那么\(a[j]\)号兔子会跳到它当前坐标关于\(x\)的坐标的对称点。
(注意,即使兔子的位置顺序变化了,但是编号仍保持不变,这里按兔子编号算)兔子会进行\(k\)轮跳跃,对每个兔子,请你求出它最后坐标的期望值。
题目解法:
这道题,推荐洛谷Kinandra题解
由期望的性质,我们每次跳跃之后,可以看作兔子的坐标直接变成了它的期望。
之后我们差分,发现每一次跳跃,就是将那个兔子左右的两个差分数组中的元素交换。
那么一轮就是一个置换,多次可以快速幂,也可以\(O(M)\),但是我只会快速幂\(QAQ\)。
\(D.\ Median\ Pyramid\ Hard\)
简要题意:
给出一个\(N\)层的方格金字塔,自顶向下依次标号为第\(1\)到第\(N\)层。
其中第\(i(1 \le i \le N)\)层有\(2i − 1\)个方格。
第\(N\)层有一个\(1\)到\(2N-1\)的排列,其他层的数字按以下规则生成:
方格\(b\)中填写的整数,是方格\(b\)正下方,左下方和右下方方格中所写整数的中位数。
现在给出第N层的数字,请你求第一层的数字(注意,这一行和\(B\)题不一样)。
题目解法:
我们可以二分答案,那么就只有\(0\)和\(1\)两种数字了。
之后在用\(B\)题的结论(就是那个两个一样的可以一直顶上去的结论),判断是否合法。
具体做法是,一段交错的\(01010\)在下一层就会变成取反的交错\(10101\),那些连续的\(000\)或\(111\)只可能变长,不会被吞掉,所以很好写。
\(E.\ Rotate\ 3x3\)
简要题意:
我们有一个\(3\)行\(N\)列的初始矩阵,\((i,j)\)位置的数为\(i+3j-3\)。
我们有一个这样的操作:选择一个\(3 \times 3\)的子矩阵,将这个子矩阵旋转\(180°\)。
现在给出一个\(3\)行\(N\)列的矩阵(矩阵中的数各不相同),问能否通过若干次上述操作将初始矩阵变为给定的矩阵。
题目解法:
显然,我们考虑将给定的矩阵变成初始矩阵。
首先,我们能够用每一列中间的数字确定这一列在初始矩阵中在第几列。
注意到,每次操作,每一列所在的列的奇偶性是不会变的。
那么我们可以先判断奇偶性,如果不合法,就不可能了。
之后我们先将操作当成冒泡排序,将每一列放到它在初始矩阵中的那一列,但此时可能上下颠倒。
之后,注意到列数不小于\(5\),而且可以通过手玩发现,在这样的条件下,能够通过一系列操作,将任意距离为\(1\)的两列仅仅上下翻转而不影响任何其他的因素。
那么我们就从头开始,如果这一列反了,就让它和下一个同奇偶的列同时翻转,做到最后,就直接判断能不能都回原就好了。
补充:
那个冒泡显然不能直接冒泡,
我们发现,每次操作,不仅交换了两列的位置,而且这三列的状态都翻转了,
那么就是奇数(偶数)的列的翻转列数奇偶性改变,而偶数(奇数)的列的翻转列数奇偶性不变。
我们只要判断翻转列数的奇偶性就行了。
不过建议大家参考洛谷题解。
\(F.\ Blackout\)
简要题意:
有一个\(N\)个点的图,有\(M\)条边,如果存在\(Edge(x,y)\)和\(Edge(y,z)\),那么\(Edge(z,x)\)就会出现。
问最后会有多少条边。
题目解法:
咕咕咕。