• 2019 Multi-University Training Contest 1


    2019 Multi-University Training Contest 1

    A. Blank

    upsolved by F0_0H

    题意 给序列染色,使得 ([l_i,r_i]) 区间内恰出现 k 种颜色。

    做法 DP,(dp[i][x][y][z]) 表示考虑前 (i) 个位置,剩下 3 种颜色最后出现的位置为 (x,y,z) 的方案数 ((igeq x geq y geq z))

    复盘 比赛开始就提出了这个做法,但很遗憾,过题效率太低,再加上觉得 (O(n^4)) 过不去,没有在比赛中写这题。


    B. Operation

    题意 一个序列,两种操作,1. append 元素 x 2. 查询区间内子集异或最大值。强制在线。

    复盘

    • 发觉如果查询可以离线,可以分治解决跨过mid的区间,(O(nlogn + B^3q)) 能解决问题。
    • 在线就顶不住了。

    做法 对于一个前缀 (a[1],...a[r]) build的线性基时,使得每一维基向量位置尽可能靠后,并记录它们的位置,即可解决右端点为 (r) 的查询。


    D. Vacation

    solved by sdcgvhgj 233min -1

    题意 单行道上很多辆车在走,求最后一辆车过线时间。

    做法1 堆维护两车合体的时间。

    做法2 枚举最后一辆车过线的时候是和谁合体的。

    做法3 每个车的时间位移图像是个凸壳,求这个凸壳。

    复盘 选择了一种不太舒适的做法 3。


    E. Path

    solved by rdc 32min -1

    题意 删掉权值最小的边,使得 (1)(n) 最短路变长。

    做法 留下可能出现在最短路上的边,做最小割即可。

    复盘 数组开小 TLE 了一发,下次注意点。


    F. Typewriter

    upsolved by sdcgvhgj

    题意 打印一个字符串,每次可以打印一个字符,也可以复制一段子串,求最小耗费。
    做法

    • 对于每个位置j,欲求最靠左的位置i,使得i+1到j是1到i的子串
    • 对于每个j,i是递增的,所以对1到i建SAM,对于每个j,持续移动i直到满足条件
    • 普通在SAM跑串匹配时每次要匹配一个字符,需要一直向上跳,直到可以转移到这个字符
    • 但如果每次用这种方法判断是否满足条件会退化到n方
    • 因为长度在缩短,所以跳之后可以保留位置
    • 比赛时意识到应该是SAM,但是一直在想怎么建好SAM之后找到N条转移关系,然后GG了,还是对SAM理解不够

    复盘

    • 意识到应该复制极长的串。
    • 提出了 SA + 二分 + RMQ 的方案,因复杂度否决了这个做法。

    I. String

    sdcgvhgj击中立柱,rdc跟进补射 171min -5

    题意 求字典序极小子串,满足各字符出现次数限制条件。

    做法 逐位考虑。

    复盘 这题很不顺利,初始化GG+check不周。建议 sdcgchgj 提高代码复用率,一段逻辑要在多个地方执行时,写个函数,会舒适很多。


    K. Function

    rdc写一半逃跑了,sdcgvhgj补刀 298min -2

    题意 这个公式长得很漂亮,不如我们TLE一下。

    做法

    • ([i^{frac{1}{3}}]) 分类统计答案。
    • ([i^{frac{1}{3}}]=x) 时对答案的贡献为 (sum_{i=x^3}^{(x+1)^3-1} gcd(x,i)),根据辗转相除法,不难证明,此和式循环节为 (x)
    • 线性筛预处理 (sum_{i=1}^{n}gcd(i,n))

    复盘

    • rdc (O(nlogn)) 解体后,试图施展线性筛,又解体了,sdcgvhgj 中流砥柱!
    • 求解 (f(x)=sum_{i=1}^{x}gcd(i,x)) 真的是很经典的问题啊...... 在这种地方居然逡巡而不入。

    L. Sequence

    solved by rdc 188min -1

    题意 给一个序列({a_n}),有3种变换,第 (k) 种为 (a_i = sum_{jleq i,(i-j)\%k=0} a_j)

    做法

    • 变换相当于对序列做矩阵乘法。注意到三种操作的矩阵可以交换。
    • 故可先进行若干次变换1,再进行变换 2,最后进行变换 3。
    • 考虑变换注意到变换的结果每个元素可被 (a_1,a_2,....a_n) 线性表示,第 (k) 次,序列变成 ({inom{k-1}{k-1}a_1,inom{k}{k-1}a_1+inom{k-1}{k-1}a_2,inom{k+1}{k-1}a_1+inom{k}{k-1}a_2+inom{k-1}{k-1}a_3\,......}),可以数学归纳证明。
    • 可以看成 ({a_1,a_2,a_3,.....})({inom{k-1}{k-1},inom{k}{k-1},inom{k+1}{k-1}.....}) 卷积。

    复盘

    • rdc 义正言辞地表示操作顺序是有关的!【卜】,活鱼的这个识破极为关键。
    • 做 k 次前缀和这样的经典问题,居然在比赛时磨一年洋工。
    • 组合数学,还得练啊。

    M. Code

    upsolved by sdcgvhgj

    题意 给一些红色的点,一些蓝色的点,能否用一条直线隔开。

    复盘 比赛时想找关键点枚举直线,笨蛋啊!

    做法 check 凸包是否有交。

    不观察性质,看着 (nleq100) 就开始白给。


    总结

    • 糟糕的比赛节奏,在所有 AC 的题上,都有很多不必要的资源消耗。
    • 键盘上的选手和键盘下的选手,缺乏沟通。
    • 未能成功识破 D、M。
    • K、L 公式推倒不熟练。
  • 相关阅读:
    对象排序
    MYSQL连不上
    JS读取.properties文件的方法
    Jquery简单使用
    JSP中request获取值
    MYSQL修改字段
    配置文件读取
    spring注解
    Route@简单应用
    MVC客户端验证的小示例
  • 原文地址:https://www.cnblogs.com/FST-stay-night/p/11227505.html
Copyright © 2020-2023  润新知