zoukankan      html  css  js  c++  java
  • 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))就会出现。
    问最后会有多少条边。

    题目解法:

    咕咕咕

  • 相关阅读:
    个人技能总结8--linux 基本命令的使用
    个人技能总结7--Apache服务器反向代理,负载均衡,热备份+Tomcat配置
    个人技能总结6--Java网络接口以及协议
    个人技能总结5--Redis在Javaweb项目中的应用
    个人技能总结4--MongoDB在windows上安装以及java中的增删改查
    个人技能总结3--Mysql--20170828
    从源码的角度解读String、StringBuilder、StringBuffer的性能差别
    java二叉树的实现
    如何理解递归?
    继承泛型类
  • 原文地址:https://www.cnblogs.com/tacmon52818/p/12732000.html
Copyright © 2011-2022 走看看