• AGC035


    Contest Page

    A

    唯一会做的题/kk

    题目相当于要求相邻三个的异或和为(0)

    当我们放入了三个数(a,b,c)时,接下来的放入顺序显然一定是(a,b,c,a,b,c,...)。所以当数可以分成三份,每份大小(frac{n}{3})且其中的数全部相等,从三份中各取一个数的异或和为(0)时有解,否则无解。

    B

    当边数为奇数的时候显然无解

    否则选出一棵生成树,其他的边乱选方向,树上自底向上确定边的方向,一条树边应当使得其儿子的出度变为偶数。因为边数是偶数所以根也一定满足条件。

    C

    (n=2^k)时显然无解

    否则考虑增量构造。注意到已经给出了(n=3)时的答案,我们从(4)开始,每一次两两在树上用下图的方式将点挂在树上:

    上面是一个(n=5)的情况,挂上的(4,5,9,10)点显然是满足条件的。与此同时权值为(6,7)(8,9)(10,11)...的点也可以这样做。

    对于最后剩下的一个权值也不难在树上找到一条经过(1)和其他两个节点的路径的异或和为这个权值。

    D

    考虑时间倒流,也就是每一次两个位置吐出一个新的位置出来。

    记录每一个位置的值自然不可取,我们可以考虑记录每一个位置对答案的贡献。最初两个位置对答案的贡献均是(1),接下来每一次吐出的一个位置的贡献则是其旁边两个位置的贡献之和。

    接下来考虑DP:设(f_{l,r,fl,fr})表示要确定区间([l+1,r-1])的所有位置的贡献,(l)的贡献是(fl)(r)的贡献是(fr)时的最小贡献,转移枚举由(l,r)吐出来的位置的编号然后递归进入两边的DP过程。

    因为每递归一层((fl,fr))数量至多翻倍,所以总状态数是(O(2^nn^2))的,复杂度(O(2^nn^3))

    E

    考虑某个集合是否合法。如果集合中同时存在(x)(x-2)则连边((x,x-2));同时存在(x)(x+K)则连边((x,x+K)),那么有环显然不合法,无环时选择一个拓扑序进行删除显然合法。那么我们需要求的就是无环的集合数量。当(2 mid K)时奇偶独立,对于奇数和偶数都是不能选择连续的(frac{K}{2}+1)个数,这个可以简单地解决。

    (2 otmid K)时则不能存在(a>b , a otequiv b ( mod2))满足(a,a-2,...,b-K,b,b-2,...,a-K)同时在集合内。两者都是一段连续的区间,那么可以考虑从小到大将数加入到集合中。

    (f_{i,p,q,fp,fq})表示已经填入了(1 sim i),当前填入的奇数段长度为(p)、偶数段长度为(q),奇数从现在开始一直填到(fp)就不合法,偶数从现在开始一直填到(fq)就不合法,满足这些条件的集合数量。

    不失一般性地考虑(2 otmid i+1)的转移。首先可以选择不填(i+1),因为限制需要一直填到(fp)才不合法,此时不填则限制全部消失,即

    [f_{i,p,q,fp,fq} ightarrow f_{i+1,0,q,N+1,fq} ]

    如果填则必须要满足(fp > i+1)。此时如果存在一个在偶数段内的数能够通过(K)跳到(i+1),即(i+2-2q+K leq i+1),则此时这个奇数段必须不能通过(K)跳到与当前偶数段相连的偶数位,即(fq leq i+1-2p+K)。有转移:

    [f_{i,p,q,fp,fq} ightarrow f_{i+1,p+1,q,fp,min(fq,i+1-2p+K)} ]

    如果不存在这样的位置,那么就不会有限制,即

    [f_{i,p,q,fp,fq} ightarrow f_{i+1,p+1,q,fp,fq} ]

    注意到(fp,fq)只有(p,q)中较大的那一个可能不是(N+1),否则一定已经存在环,所以((fp,fq))的数量是(O(N))级别的。复杂度(O(N^4)),状态常数很小可以map实现。

    F

    (k_i = j-1,l_j=i)时,可以让(k_i)(1)(l_j)(1),得到一个等价的状态。我们设无法进行这样操作的状态是标准状态,考虑证明标准状态与网格一一对应。一个标准状态肯定对应一个网格,只需证明一个网格对应一个标准状态。

    假设有两个不同标准状态((l,k))((l',k'))对应相同的网格,则(l)(l')(k)(k')必定不同。找到第一个位置(x)满足(l_x eq l'_x),不失一般性假设(l_x < l'_x),则:

    如果(x=1),则显然在两个矩阵中(A_{l'_x,1}=1),所以(k_{l'_x,1}=0),则第二个状态不是标准状态;

    如果(x eq 1),则两个矩阵中(A_{l'_x , x} = 1),必定有(k_{l'_x} geq x , k'_{l'_x} < x),而因为((k',l'))是标准的,所以(k'_{l'_x} eq x-1),所以两个矩阵中的(A_{l'_x , x-1})必定不同,与假设矛盾。

    所以我们只需要算标准状态的数量,考虑以下两种做法:

    1、DP:设(f_{i,j})表示考虑了前(i)列、有(j)行满足(k_x leq i),转移枚举有多少行等于(i-1),则有

    [f_{i,j} = sumlimits_{k leq j} f_{i-1,k} inom{j}{k} (N+1-(j-k)) ]

    不难发现这是一个卷积的形式,可以多项式快速幂优化,但是因为出题人没想到这种做法所以如果exp稍微慢一点就会被卡;

    2、容斥:容斥有多少对((x,y))满足(k_x=y-1,l_y=x),其余随意指定,则答案为

    [sumlimits_{i=0}^{min(N,M)} (-1)^i inom{N}{i} inom{M}{i} i! (N+1)^{M-i} (M+1)^{N-i} ]

  • 相关阅读:
    常用正则表达式
    在过滤器中设置一个应用范围内的路径
    在过滤器中设置一个应用范围内的路径
    shell編程之遠程開啓多個機器的ElasticSearch
    shell之CMD的使用,是用` `還是" "?
    shell編程之自動化集群搭建並啓動
    shell編程之權限
    登录用户出现‘’-bash-4.2$‘’的问题解决
    locate: can not open `/var/lib/mlocate/mlocate.db': No such file or directory
    Spring之mvc應用(包含aop)
  • 原文地址:https://www.cnblogs.com/Itst/p/11716359.html
Copyright © 2020-2023  润新知