Atcoder AGC006 解题报告

(A. Prefix and Suffix)

简要题意:

给出长度为(N)的字符串(S)(T),求一个字符串满足:

  1. 长度至少为(N)
  2. 前缀为(S)
  3. 后缀为(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 imes 3)的子矩阵,将这个子矩阵旋转(180°)
现在给出一个(3)(N)列的矩阵(矩阵中的数各不相同),问能否通过若干次上述操作将初始矩阵变为给定的矩阵。

题目解法:

显然,我们考虑将给定的矩阵变成初始矩阵。
首先,我们能够用每一列中间的数字确定这一列在初始矩阵中在第几列。
注意到,每次操作,每一列所在的列的奇偶性是不会变的。
那么我们可以先判断奇偶性,如果不合法,就不可能了。
之后我们先将操作当成冒泡排序,将每一列放到它在初始矩阵中的那一列,但此时可能上下颠倒。
之后,注意到列数不小于(5),而且可以通过手玩发现,在这样的条件下,能够通过一系列操作,将任意距离为(1)的两列仅仅上下翻转而不影响任何其他的因素。
那么我们就从头开始,如果这一列反了,就让它和下一个同奇偶的列同时翻转,做到最后,就直接判断能不能都回原就好了。
补充:
那个冒泡显然不能直接冒泡,
我们发现,每次操作,不仅交换了两列的位置,而且这三列的状态都翻转了,
那么就是奇数(偶数)的列的翻转列数奇偶性改变,而偶数(奇数)的列的翻转列数奇偶性不变。
我们只要判断翻转列数的奇偶性就行了。
不过建议大家参考洛谷题解

(F. Blackout)

简要题意:

有一个(N)个点的图,有(M)条边,如果存在(Edge(x,y))(Edge(y,z)),那么(Edge(z,x))就会出现。
问最后会有多少条边。

题目解法:

咕咕咕

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