zoukankan      html  css  js  c++  java
  • CF1305

    A

    sb题


    B

    sb题


    C

    根据容斥原理,如果 (n>m),则至少存在两个数满足 (a_i=a_jpmod m),所以输出 (0) 即可,否则暴力。


    D

    选两个叶子节点,然后查询,然后删除其中一个或者两个即可。

    保证每次查询至少可以删除一个点,同时查询的上界为 (lfloorfrac{n}{2} floor)


    E

    如果 (n) 给定如何构造保证答案最大?

    1 2 3 4...
    

    否则如果大于了怎么办?

    设到第 (k') 位有和为 (w),那么 (m-w) 如何放入进去?

    我们发现之前的答案增长是第 (i) 位增加 (lfloorfrac{i-1}{2} floor)

    那么肯定有 ((m-1/2)>m-w),那么把 (m-w) 变成两倍,然后从那个位置开始放即可。


    F

    发现答案的上界为 (n) 中的奇数个数。换而言之答案上界 (le n)

    另一边,由于答案的上界为 (n) 所以对于最后的答案,一定至少有 (frac{n}{2}) 个数只被操作了 1 次或者以下。

    否则操作次数 (>n)

    于是随机一个数,这个数就有 (frac{1}{2}) 的概率没被操作过/只被操作了 (1) 次。

    于是随机 (m) 次然后对这 (3) 种情况分解质因数即可。需要注意的是 check 方式与因数无关只需要知道质因数即可。

    复杂度 (O(msqrt a_i+mw(a_i) imes n)),正确率:(1-frac{1}{2^m}),其中 (w) 为质因数。

    (m)(60) 才过题...

    这道题好玩.jpeg


    CF1305G [* hard]

    给定 (n) 个数 (a_i),并生成图 (G)

    对于 ((i,j)),若 (a_i~ extrm{and}~ a_j=0),那么连接 (ileftrightarrow j)

    现在每个点都要被加入集合 (S),有两种方式加入集合:

    1. 直接加入集合 (S),贡献为 (0)
    2. 对于 (v),选择这个与这个点有边的点 (u)(需保证 (u) 在集合内),然后将 (v) 加入集合,贡献为 (a_u)(即起点)

    最大化贡献。

    (nle 2 imes 10^5,a_iin [0,2 imes 10^5])

    Solution

    神仙题...我完全没想到点子上。

    考虑建一张图,对于 ((i,j))(a_i ~mathbf{and}~a_j=0) 就连边 (i o j)

    同时我们加入一个点权值为 (0)

    然后我们让每条边的权值为 (a_i+a_j)

    不难发现答案是边权和减去点权和。

    于是从大到小枚举 (a_i+a_j=w),然后枚举 (w) 的子集 (x),连接 (x)(woplus w) 即可。

    复杂度 (mathcal O(3^{18} imes alpha))

    可以考虑 B 开头的生成树算法,每次在一个连通块选一个最大出边连出去,然后可以证明合并次数不超过 (log) 次。

    于是对每个元素保留最大出边即可,这个等价于满足为其取反子集的最大值,可以用 dp 算。

    每轮都做一次这个 dp 即可,复杂度 (mathcal O(2^{18}log(w) alpha(w)))


    CF1305H []

    不会。

  • 相关阅读:
    403
    311
    401
    310
    308
    309
    307
    304
    3-1
    2-11
  • 原文地址:https://www.cnblogs.com/Soulist/p/13662244.html
Copyright © 2011-2022 走看看