zoukankan      html  css  js  c++  java
  • AGC016解题报告

    留坑一个AGC010,做完了懒得更,难度也不是特别大,先咕着。

    A

    枚举哪个字符占领全部,每次相当于每个字符可以向前感染一个,把最后的字符去掉,直接模拟即可。

    B

    这种题WA两发也是醉了。

    考虑两个人看见的颜色数不同,只有一种情况就是一个人是独有某种颜色,另一个人和别人共享颜色。

    所以最大最小值只能差1,较小的一定是独有颜色,对于剩下的人和颜色,只要保证每种颜色至少有两个人即可。

    注意特判剩下颜色数小于等于0的情况

    C

    被样例所蛊惑。

    以为每个矩阵填右下角填个较大值,剩下的填1,然后被$1 5 1 4$hack掉了。

    这个样例可以左右两端各填一个inf,中间填一个inf+1即可。

    所以可以推广至矩形,在$1,1$开始填inf,$h,w$开始填inf+1,这样可以保证如果正的比负的多,那么一定有解。

    其实如果满足$n,m$不同时被$h,w$整除,那么一定有解

    D

    可以发现一个显而易见的性质:每取出一个数是所有数异或和,再次取出的时候的值就是刚才被替换掉的那个值。

    所以题意转化如下:$A$数组有$n+1$个数,$B$数组有$n$个数,从$A$中的指定的一个值开始,每次选择和一个值交换,直至AB两串相等。

    不合法的情况很显然:B中有的数在A中没有出现过。

    然后最小化方案,考虑建图,如果$A$中的$X$要变成$B$中的$Y$,相当于从$Y$向$X$连一条边,走过这条边相当于把$Y$变成$X$,然后现在手上的是$X$。

    可以发现边数就是$AB$前$n$个元素不同的值的个数,要把所有边全部走过,最好情况就是直接有欧拉路,那么交换次数就是边数。

    但是通过不合法的性质我们可以发现每个值的入度和出度差至多为1,因为前$n$个元素至多有一个不相同,故对于每个联通块一定都有欧拉路。

    所以我们只要对不同联通块之间加一条边就可以满足要求了,答案是边数+联通块数-1

    注意一个特殊情况:如果$A$中刚开始指定的值在所有联通块中都没有出现过,需要多花费一步进入联通块。

    E

    难度其实和D差不多,属于那种比较烦但是可肝的题。

    主要就是考虑钦定一个鸡永远不会死,那么遇到他的只能在碰到他的那一瞬间死掉,前面必须活着,然后向前递归:

    对于在我死之前遇到我的,必须死,对于在我死之后遇到我的,则更新对方的最晚死亡时间。

    注意递归的时候可能会出现矛盾的情况,那么无论如何这只鸡也活不下去了。

  • 相关阅读:
    Redis持久化
    Redis配置文件详解
    Linux
    有图有真相
    Redis五大数据类型
    Redis基本知识
    Mysql主从复制
    Python脚本实现KVM虚机添加磁盘
    JQuery制作环形进度条
    JQuery制作标签
  • 原文地址:https://www.cnblogs.com/Forever-666/p/14050716.html
Copyright © 2011-2022 走看看