zoukankan      html  css  js  c++  java
  • 杂题20200407

    Connecting Cities

    给定 (n) 个点和一个常数 (D) ,第 (i) 个点权值为 (a_i) ,点 (i, j) 之间有一条边权为 (|i-j| imes D+a_i+a_j) 的边,求这张完全图的 MST 权值

    • (nleq2 imes10^5)
    • (D, a_iin[1, 10^9])

    我会 Boruvka 直接莽, (O(nlog^2n))

    考虑分治,假设当前处理到了区间 ([l, r]) ,可以发现 ([l, mid])([mid+1, r]) 之间的某些边是不会被用到的,只用建出 区间 ([l, mid])(A_{pos}-pos imes D) 最小的 (pos)([mid+1, r]) 中每一个点的边;区间 ([mid+1, r])(A_{pos}+pos imes D) 最小的 (pos)([l, mid]) 中每一个点的边

    一共会建出 (O(nlog n)) 条边,暴力求最小生成树,时间复杂度 (O(nlog ^2n))

    还有一种线性的神仙做法,鸽了


    GCJ 2018 Round 1B Task2 Mysterious Road Signs

    给定三个长为 (n) 的序列 (A, B, D) ,其中 (D) 单调递增

    定义一段区间 ([l, r]) 合法,当且仅当 (exist (M, N), forall lleq ileq r, D_i+A_i=M)(D_i-B_i=N) 成立

    求出合法区间的最长长度,与最长的合法区间个数

    • (nleq10^5)
    • (A_i, B_i, D_iin[1, 10^6])

    做法一:

    分治,对于区间 ([l, r]) ,求出 (mid, mid+1) 对应的 (M, N) ,往左 / 往右找到第一个不满足 (M) / (N) 限制的位置,讨论四种情况即可, (O(nlog n))

    做法二:

    (f(i, j, k)) 为 以 (i) 结尾,限制条件中的 (M=j, N=k) 时,最长的合法区间长度

    有用的状态数显然是线性的

    转移可以考虑记一个 (g1(i, j)) 表示限制条件中的 (M=j, N=-1) 时,最长的合法区间长度; (g2(i, k)) 表示限制条件中的 (M=-1, N=k) 时,最长的合法区间长度

    现在 (f(i, j, k)) 就可以从 (f(g1(i, j)-1), f(g2(i, k)-1)) 转移,时空复杂度 (O(n))


    CF444C DZY Loves Colors

    给定一个序列,初始 (a_i=i) ,每个位置的权值为 (0) ,有 (q) 次操作:

    1. 将区间 ([l, r]) 赋值为 (x) ,如果第 (i) 个位置被赋值为 (x) ,第 (i) 个位置的权值会增加 (|a_i-x|)
    2. 询问区间 ([l, r]) 的权值和

    (n, qleq10^5)

    结论:序列的颜色段数量在 (q) 次操作中总共只会有 (O(n+2q))

    因此在线段树上,对于区间颜色相同的点直接打 tag,否则暴力递归


    CF808G Anthem of Berland

    给定两个串 (s, t)(s) 包含小写字母和问号, (t) 仅包含小写字母

    (s) 中的每个问号变成一个小写字母(共 (26^{cnt}) 种方案),求出所有方案中, (t) 匹配 (s) 子串的次数的最大值

    (|s|, |t|leq10^5; |s|cdot|t|leq10^7)

    做法一:

    (f_{i, j}) 为走到 (s) 的第 (i) 位,匹配了 (t) 的前 (j) 个字符,当前答案的最大值

    对于 (s_i= ?) ,暴力枚举 (26) 种字符,使用 kmp 转移

    做法二:

    (f_i) 为走到 (s) 的第 (i) 位,当前答案的最大值

    可以枚举是否在 (i) 处匹配一个 (t) 转移,由于最优解 (t) 的所有匹配位置可能有交,因此要枚举 (t) 的所有 next,但是这并不能保证 (s) 对应位置等于 (t) 的某一个前缀,因此需要保证在上一段 (s) 的末尾放了一个 (t)

    因此记 (g_i) 为强制在 (s) 的第 (i) 位匹配一个 (t) ,当前答案的最大值,即可转移


    CF1327D Infinite Path

    给定一个长为 (n) 的排列 (p) ,和一个颜色序列 (c_i)

    定义两个排列 (p, q) 的乘积为 ({p_{q_i}})

    找到最小的正整数 (k) ,令 (q=p^k) ,存在 (i) 满足 (c_i=c_{q_i}=c_{q_{q_i}}=cdots)

    (displaystylesum nleq2 imes10^5)

    结论1:将 ((i, p_i)) 连边,对于 (p) 中的所有环,在新图内从这个环的第 (i) 个点向第 (i+k) 个点连边,构成了 (p^k) 的图

    结论2:令 (p) 中的某一个环环长为 (sz) ,则这个环在 (p^k) 中构成的环与 (p^{gcd(k, sz)}) 中构成的环元素相同

    题目即为找一个 (k) 使得 (p^k) 存在一个颜色相同的环,由于结论2,对于 (p) 中的一个环,枚举 (sz) 的所有因数 (k) ,考虑这个环在 (p^k) 中的构成,判断是否满足条件,时间复杂度 (O(nsqrt n))

  • 相关阅读:
    PAT (Advanced Level) 1060. Are They Equal (25)
    PAT (Advanced Level) 1059. Prime Factors (25)
    PAT (Advanced Level) 1058. A+B in Hogwarts (20)
    PAT (Advanced Level) 1057. Stack (30)
    PAT (Advanced Level) 1056. Mice and Rice (25)
    PAT (Advanced Level) 1055. The World's Richest (25)
    PAT (Advanced Level) 1054. The Dominant Color (20)
    PAT (Advanced Level) 1053. Path of Equal Weight (30)
    PAT (Advanced Level) 1052. Linked List Sorting (25)
    PAT (Advanced Level) 1051. Pop Sequence (25)
  • 原文地址:https://www.cnblogs.com/Juanzhang/p/12651505.html
Copyright © 2011-2022 走看看