• Codeforces Round #692 Div1


    A

    首先忽略初始在对角线上的点
    答案的下界显然为现在的点数

    考虑对于对角线((i,i)),在第(i)行出现的与在第(i)列出现的点连边
    容易得到答案的下界为:点数+环的个数

    容易证明

    B

    结论:最后填数一定是某个前缀填(0),剩下的填(1),或前缀填(1),剩下的填(0)

    证明:
    考虑两个位置(0,1),交换后发现01与10的数量不变

    C

    结论:当(nge 2)(n-1)最后的符号一定是(-)(n)最后的符号一定是(+),其他位置符号任意

    证明:
    对于----+???-+这种情况,显然左边的-是可以全部实现的
    于是我们考虑+????-+是否能被构造出来
    我们找到最靠右的一个-,使得前面为+(-可以是(n-1)
    考虑+????+---+,看成两段(+????+-)(--+)
    由于左边要取反使得上我们要构造(取反)(不取反)这两段
    发现这两段最后两个元素均为-+,通过归纳可以证明结论

    然后题目转化成了给一些二的次幂前填+/-的系数,问能否凑出(N)
    可以考虑从大到小考虑二的次幂,让(N)的绝对值最小

    正确性:
    (|x|le |y|),如果(y)可行,可以通过调整法证明(x)也可行

    D

    第一问是个经典小学奥数题:

    • (n=1)(1)
    • (n\%3=0)(3,3,3,cdots,3)
    • (n\%3=1)(3,3,3,cdots,3,2,2)(3,3,3,cdots,3,4)
    • (n\%3=2)(3,3,3,cdots,2)

    以下讨论(nge 2)

    下面考虑最小操作数
    为了方便,我们先将环全部拆开,再全部合并,这样不影响操作

    观察:大于(4)的环我们会反复将其分离出一个(3)的环,直到其长度(le 4)

    特殊情况,(n=4)时可能拆(3),容易证明其他情况的(3)环我们都不会动

    那么现在我们有(1)环、(2)环、(4)

    我们分类讨论哪些拼成非(3)环的那部分,其他的都拼成(3)

    下面将一下代码怎么写比较简单
    容易发现在非(3)环拼完后,这时(4)环我们均会拆成(1,3)
    那么我们仅需讨论(1,2)环怎么拼成若干(3)环,我们单独写一个函数query(c1,c2)来解决此问题

    具体可以看下代码

    E

    (c_i)为sg值等于(i)的点个数,用异或卷积定义乘法
    显然答案为:

    [frac{1}{n+1}sumlimits_{i=0}^{infty} frac{c^k}{(n+1)^k}=frac{1}{n+1}cdot frac{1}{1-c/(n+1)} ]

    可通过fwt实现

    F

    定义:对于路径(u,v),令(key(u,v)=lca(u,v))。对于路径集合(P),令(key(P))(key(u,v))深度最大的点。
    定义:令(up(u,d))(u)往根跳(d)步的点,若不存在令(up(u,d))为根

    结论1:对于集合(P),若(d)邻域有交集,则包含(up(key(P),d))

    证明:
    (x=up(key(P),d))
    首先(key(P))(x)子树内的路径显然(d)邻域包含(x)
    (key(P))不在(x)子树内的路径(d)邻域不包含(x),则显然整条路径均不在(x)子树内,容易证明必定无交

    (key(P))容易维护
    (x=up(key(P),d))
    于是我们将问题转化为:

    询问一个点(x)是否存在于每条路径的(d)邻域

    (K=up(x,d))

    结论2:对于集合(P),若(d)邻域包含(x),必要条件是每条路径至少存在一个端点在(K)子树内

    证明显然

    具体来讲,结论2是在处理(key(u,v))不在(K)子树的路径是否均合法(路径经过(K)
    现在是要讨论(key(u,v))(K)子树内的路径集合是否合法

    结论3:对于(key(u,v))(K)子树内的路径,该路径(d)邻域包含(x)的充要条件为(key(u,v))(K)的距离(le d)

    证明:
    对于(key(u,v))(x-K)路径上的情况,显然(d)邻域包含(x)
    其他情况,路径(u,v)距离(x)的最短路径等于(key(u,v))(x)的距离

    我们将问题转化为:

    (K)子树中的有效点是否离(x)距离均(le d)

    这是一个经典问题,可以用线段树维护树的直径
    (O(nlogn+qlogn))

  • 相关阅读:
    Linux常用命令
    ServerSocketChannel和SocketChannel
    Java扫描包
    [BZOJ3874/AHOI2014]宅男计划
    [BZOJ4029/HEOI2015]定价
    [考试]20151012贪心
    [BZOJ4027/HEOI2015]兔子与樱花
    [考试]20151010
    [考试]20151009
    Test of String
  • 原文地址:https://www.cnblogs.com/Grice/p/14170116.html
Copyright © 2020-2023  润新知