• Atcoder ARC 115 A~D


    个人感觉atcoder上的题质量确实很高,比较偏向于竞赛的题型。

    A

    (;)
    (n)个人,(m)道题,每道题有两个选项。现在给出了这(n)个人的作答,用(n)个长度为(m)的01串来表示。
    问:有多少个((i,j)),满足第(i)个人和第(j)个人做对的题目数量不可能相同。
    (nleq 10^5,mleq 20)
    (;)
    显然,如果两个人有奇数道题的答案不一样,他们做对的题目数量不可能相同。
    把每个人的答案看成二进制数,问题转化为:异或后有奇数个1的数对有多少个
    然后我们发现,如果两个数满足一个有偶数个1,另一个有奇数个1,则一定是满足条件的。
    否则一定不行。
    简单试试就看出来了。
    (;)

    B

    (;)
    给定(n imes n)的矩阵(C)
    问:能否构造出两个数组(A,B),满足:(C_{i,j}=A_i+B_j)
    (n leq 500)
    (;)
    显然(A)是每一行的最小值,(B)就是这行每一列的数与这行最小值的差
    (O(n^2))简单判断一下是否是无解情况就行了
    (;)

    C

    (;)
    要求构造出长度为(n)的序列,使得对于任意(i|j)的情况,(a_i eq a_j)
    要求序列的最大值最小。
    (nleq 10^5)
    (;)
    考虑一个位置的数,限制条件就是它的因数们。
    考虑dp,那么一个位置应填的数,一定要比它所有因数下标中,填的数最大的那个+1
    即:(dp_i=max {dp_j } +1),这里(j)(i)的因数
    所以我们也可以直接枚举倍数去dp,复杂度为调和级数:(O(n log n))
    (;)

    D

    (;)
    给定(n)个点,(m)条边的无向图(不保证联通)。
    (m)条边中选出一些边,与(n)个点所构成的图叫做生成子图
    问:对于(k=0,1cdots ,n)
    (k)个点的度数为奇数的生成子图有多少个。
    (nleq 5000)
    (;)
    对于(k)为奇数的情况,答案就是0
    然后考虑的情况:
    我们发现(ans_k=C_n^k)
    为什么?
    我们从这(n)个点中选出(k)个点,然后一定保证有且只有一种构造(选边)方案,使得这(k)个点度数都为奇数。
    下面我们把那(k)个点称作关键点
    证明:因为是(k)是偶数,所以我们进行两两配对。这样路径的两个端点奇偶性一定会发生变化,且路径中间的点奇偶性不会变。
    而且我们必须从下往上逐渐进行配对,每次找到深度最深的点(x),满足它至少有两个子树中都有1个关键点
    然后两两配对。又发现,配对的过程,必须是选这些关键点与(x)之间的路径上的边。
    感性理解一下就好。
    (;)
    然后考虑非树(即)的情况
    我们一定可以从中找到一颗生成树,剩下(m-n+1)条边不是树上的边。
    (m-n+1)条边可以随便选。然后剩下的边又变成了树的情况
    虽然选非树边会改变某些点的奇偶性,但是由于变成奇点的数量也一定是偶数个,而(k)也是偶数。
    你会发现这两个玩意合并起来,只考虑树边使要变为奇点的(这里的奇点是只考虑树边贡献的度数)数量也一定是偶数。
    这其实与(A)的思路有些类似。
    因此,图的情况即是(C_n^k imes 2^{m-n+1})
    (;)
    若有多个连通图,那么只需进行一次简单的dp。
    怎么dp就比较显然了。
    看起来dp的复杂度是(O(n^3))的(也有可能是我自己sb了),实际上是(O(n^2))

  • 相关阅读:
    checkbox的checked事件的javascript使用方法
    JSTL标签API(c)的使用
    radios控件的使用
    验证方法判斷input是否为空
    软件课设Day5
    软件课设Day4
    软件课设Day3
    软件课设Day2
    软件课设Day1
    2019/08/23最新进展
  • 原文地址:https://www.cnblogs.com/czyty114/p/14691097.html
Copyright © 2020-2023  润新知