• Helvetic Coding Contest 2019 差A3 C3 D2 X1 X2


    Helvetic Coding Contest 2019

    A2

    题意:给一个长度为 n 的01序列 y。认为 k 合法当且仅当存在一个长度为 n 的01序列 x,使得 x 异或 x 循环右移 k 位的 01 串得到 y 。问合法的 k 的个数。 (n le 2*10^5)

    key:找规律

    考虑如何check一个 k 是否合法。那么对于所有的 i 和 i-k 在模 n 的意义下,如果 y 的第 i 位为 0 则二者必须不同,否则必须相同。这样可以用并查集判断是否合法。实际上是把相同的缩起来后看看是否存在奇环。

    仔细观察可以发现实际上只有 i+k*m 这个集合中的点有边,并且形成了一个环,而环的大小就是集合中 1 的个数。

    实际上,对于一个 k ,只需要把 1~n 按照模 gcd(k,n) 分成等价类,判断每个等价类中 1 的个数即可。所以只需要对 n 的每个约数做预处理。复杂度 (O(nsqrt n))

    B2

    题意:给一个带权二分图,边权均为 k 。可以加若干个右部点连向所有左部点,边权为 h。求二分图最小权匹配。 (n le 1000)

    key:二分图

    实际上只有两种情况:全部匹配,花费为 n*h。或者不加新点,花费为匹配数*k。证明比较显然。写这个题主要是当时傻逼了……

    E1

    题意:给一个带权无向图。定义 (E_{max}(c_i)) 是把第 i 条边的边权最大修改成多大,使得它可能出现在最小生成树中。求 (E_{max}(c_1))(n le 10^5)

    key:最小生成树

    有一个易证的结论:若某边可以出现在最小生成树中,那么把严格小于该边边权的所有边加入图中,该边的两个端点仍然处于两个联通块中。

    E2

    题意:对于所有非树边,求上题中的 (E_{max}(c_i))。保证最小生成树唯一。 (n le 10^5)

    key:最小生成树

    因为最小生成树唯一,所以还是有一个易证的结论:一条非树边的答案为对应最小生成树的链上最大值。

    E3

    题意:对于所有边,求上题中的 (E_{max}(c_i))(n le 10^5)

    key:最小生成树

    首先先看非树边,考虑E2的做法以及它为什么在不唯一时仍然成立:对于做出来的一棵最小生成树,非树边的答案显然是大于等于链上最大值的。如果存在一个最小生成树的形态使得在这条链上的最大值更大,那么显然可以把这条边换掉来得到一个更小权的生成树,矛盾。实际上这表明对于最小生成树的任意形态,两点之间的最大值是不变的(NOIP2013 货车运输)

    对于树边其实比较简单:如果在生成树上把这条边去掉,会分成两个联通块,考虑所有连接这两个联通块的边,除去它本身最大的那条边即为答案。换句话说,所有覆盖它的非树边中最小的即为答案。这可以用并查集简单的维护。

  • 相关阅读:
    Natas Wargame Level 13 Writeup(文件上传漏洞,篡改file signature,Exif)
    Natas Wargame Level 12 Writeup(文件上传漏洞)
    Natas Wargame Level 9 Writeup(bash injection)
    Natas Wargame Level 2 Writeup 与目录泄露(强制访问)
    Natas Wargame Level 3 Writeup 与 robots.txt
    字符编码与文件操作
    python 基本数据类型
    python数据类型内置方法 字符串和列表
    python常用模块
    python数据类型及基本运算符
  • 原文地址:https://www.cnblogs.com/dqsssss/p/11179272.html
Copyright © 2020-2023  润新知