zoukankan      html  css  js  c++  java
  • 题解-ARC104

    ARC104


    ARC104A Plus Minus

    小学数学。 aclink(0)


    ARC104B DNA Sequence

    枚举区间然后开个桶统计一下即可。aclink(0)


    ARC104C Fair Elevator

    先确保 (a_i < b_i) 且所有给出的数没有重复。

    (s_i) 表示 (i) 上的桥距。具体地,(s_{a_i} = b_i - a_i)(s_{b_i} = a_i - b_i)

    (a_i, b_i) 合法当且仅当 (s_i) 合法,(s_i) 合法当且仅当它可以拆分成若干长度为 (2k) 的区间,由前半段 (k)(+k) 和后半段 (k)(-k) 个组成。

    考虑到数据范围很小,设 (f_i) 表示 ([0, i)) 是否可以合法。然后转移的时候根据上面的规则判断区间是否可以合法即可。

    aclink(1)


    ARC104D Multiset Mean

    对于所有 (1le ile N),求有多少 (1, 2, ..., N) 最多用 (K) 次组成的可重集平均数为 (i)

    枚举 (i),相当于问有多少 (1 - i, 2 - i, ..., N - i) 最多用 (K) 次组成的可重集和为 (0)

    然后这个东西可以用次数可以为负的生成函数搞成 (N)(2) 项式除以 (N)(2) 项式的形式,并且 (i)(i + 1) 只差一项分子一项分母。暴力乘除即可。

    时间复杂度 (Theta(N ^ 4)),空间复杂度 (Theta(N ^ 3))

    aclink(*0)


    ARC104E Random LIS

    考虑到 (N) 很小,相对大小的种数不会很多,可以暴搜枚举所有 (N) 个数的相对大小。

    然后用组合数学求出这种相对大小的出现次数乘以用 dp 求出最长上升子序列长度即可。

    aclink(*2)


    ARC104F Visibility Sequence

    这种码量的题我搞了一整个下午,觉得我可以退役的可以在评论区里 D 我。

    这种统计容易重复的东西最好想办法在最优值上统计它(下文的至少为 (x))。

    如果把所有 ((i, P_i)) 的边都连出来,那么会形成一棵 (n) 个点的森林。

    如果 (h_j = h_i) 因为当 (i > j)(i) 不会向 (j) 连边,所以可以当作 (h_i > h_j)

    所以可以认为所有值不一样,这样森林就会有个最高点,分成两个小森林。

    考虑区间 dp,设 (f[l][r][x]) 表示 ([l, r)) 的区间最大值为 (x) 且最大值至少为 (x) 的森林数。

    (f[l][r][x]) 可以由 (f[l][mid][a])(f[mid + 1][r][b]) 转移当且仅当 (X[mid] ge x) 并且 (a = x) 或者 (b + 1 = x)。实现的时候需要维护 (f) 数组 (x) 这维的前缀和 (s)

    时间复杂度 (Theta(n ^ 4)),空间复杂度 (Theta(n ^ 3))

    aclink(*1)


  • 相关阅读:
    Flink集群模式部署及案例执行
    Solr查询解析及内核剖析
    Spark Streaming流计算核心概念
    Kaldi语音识别CVTE模型实战
    Kaldi基础代码库及建模
    Kaldi样例实战
    Solr文本分析剖析【文本分析、分词器详解、自定义文本分析字段及分词器】
    Flink场景分析与比较【事件驱动、数据分析、数据管道】
    什么是Apache Flink实时流计算框架?
    基于Tesseract实现图片文字识别
  • 原文地址:https://www.cnblogs.com/George1123/p/14684967.html
Copyright © 2011-2022 走看看