• 2018 Multi-University Training Contest 3


    2018 Multi-University Training Contest 2

    题解

    A - Problem A. Ascending Rating

    题目描述:给定一个序列,分别求出所有长度为(m)的区间的(maxrating, count),对于每个长度为(m)的区间,一开始(maxrating=-1, count=0),然后从左往右扫,扫到一个大于(maxrating)的值时,(count+1, maxrating=)那个数。

    solution
    从左往右做,用单调队列维护当前一段单调不上升的序列,当添加一个数进来时,删掉的数的下一个最大值就是新加进来的数,将下一个最大值看成父亲,用并查集维护,那么一个区间的答案就是区间左端点的根的值和到根的距离。每个数只会进队一次,退队一次,因此时间复杂度是(O(n))

    时间复杂度:(O(n))

    C - Problem C. Dynamic Graph Matching

    题目描述:有(n)个点,有(m)次操作,每次操作要么加一条边,要么删一条边,求出每次操作后,对于所有的(k), 恰好(k)条边的匹配(即(2k)个点两个两个匹配)方案数。

    solution
    (f[sett])表示(sett)集合的点已匹配的方案数,加一条边((u, v)),就枚举除去(u, v)的集合,更新加上(u, v)的答案,删除类似。

    时间复杂度:(O(m2^n));

    D - Problem D. Euler Function

    题目描述:求出第(k)个欧拉函数是合数的(n).

    solution
    第一个是(5),第二个是(7),考虑(n>7)

    (n=2^dx),因为欧拉函数是积性函数,所以(varphi(n)=varphi(2^d)varphi(x))
    (x=1),则(varphi(n)=varphi(2^d)=2^{d-1})合数
    (x eq 1), 则(varphi(x) eq 1), 所以(varphi(n))合数
    因此(n>7)的欧拉函数都是合数。

    时间复杂度:(O(1))

    F - Problem F. Grab The Tree

    题目描述:给定一棵树,树上有点权,每次(A)选一个点拿走,然后(B)(A)选的点的邻点拿走,最后把整棵树拿走,每个人把拿走的点的权值异或起来,谁大谁赢,问在最优策略下,最终的结果。

    solution
    假设(A)的值是(x),则(B)的值为整棵树的值的异或和再异或(x),若整棵树的异或和为(0),则平手。否则将这棵树分层,会发现对于一种选取的方案,(A, B)选择的点是可以交换的,即交换后也是一种可行的方案,所以(A)必胜。

    时间复杂度:(O(n))

    G - Problem G. Interstellar Travel

    题目描述:把原本的题目等价于:当坐标相同时只保留编号较小的点,求字典序最小的凸壳。

    solution
    字典序最小的凸壳。

    时间复杂度:(O(n))

    H - Problem H. Monster Hunter

    题目描述:有一棵以(1)为根的有根树,除了根,每个点都有一只怪物,从根出发,遇到怪物时会先扣(A_i)血,再回(B_i)血,然后怪物消失,任何时刻的血量不能低于(0),问一开始至少要有多少血,才能打完所有怪。

    solution
    先不考虑打怪时要先打父亲才能打儿子。那肯定先打(A_i<B_i)的怪,对于(A_i<B_i)的怪,先打(A_i)小的。对于(A_i geq B_i)的怪,考虑(i, j)两只怪兽,先打(i),则血量减小(A_i+A_j-B_i),先打(j),则血量减小(A_i+A_j-B_j),因此先打(B_i)大的。
    假设求出来的攻击顺序为(p_1, p_2, ..., p_n)
    (p_1)没有父亲,则打(p_1)
    否则在打完(p_1)的父亲后,紧接着打(p_1)最优,因此可以将(p_1)和父亲合并,将(p_1)的儿子的父亲改成(p_1)的父亲。
    重复操作,每次操作都会少一只怪,所以只要按照打怪的规则维护一个堆,用并查集维护父亲。

    时间复杂度:(O(nlogn))

    I - Problem I. Random Sequence

    题目描述:给定一个序列(a_i),如果(a_i=0),则可以用([1, m])中的数替换,再给定一个长度为(m)的数组(v),求

    [prod_{i=1}^{n-3}v[gcd(a_i, a_{i+1}, a_{i+2}, a_{i+3})] ]

    的期望值。

    solution
    (f[i][j][k][p])表示到第(i)个数,前三个数的(gcd=j),前两个数的(gcd=k),前一个数的(gcd=p),然后枚举(i+1)是什么数,更新状态。因为(gcd)的原因,所以(j|k, k|p),因此状态数不多。

    时间复杂度:(O(能过))

    L - Problem L. Visual Cube

    题目描述:给出长方体的长宽高,输出这个长方体。

    solution
    找规律。

    时间复杂度:(O(边长^2))

    M - Problem M. Walking Plan

    题目描述:给定一个(n)个点,(m)条边的有向图,边有权值,(q)个询问,每次询问(u)(v)至少经过(k)条边的最小值。

    solution
    分块,每走(100)步分一块,预处理出每两个点恰好走(i)步的最小值,至少走(i)步的最小值,然后(100)(100)步地走,处理出恰好走(100i)步的最小值。询问时先整百地走,再加上至少走(i)步的最小值即可。

    时间复杂度:(O(n^3sqrt{k}+qn))

  • 相关阅读:
    [LeetCode]题解(python):041-First Missing Positive
    [LeetCode]题解(python):037-Sudoku Solver
    [LeetCode]题解(python):040-Combination Sum II
    [LeetCode]题解(python):039-Combination Sum
    [LeetCode]题解(python):038-Count and Say
    [LeetCode]题解(python):036-Valid Sudoku
    [LeetCode]题解(python):035-Search Insert Position
    [LeetCode]题解(python):034-Search for a Range
    [LeetCode]题解(python):033-Search in Rotated Sorted Array
    计算最长英语单词链
  • 原文地址:https://www.cnblogs.com/GerynOhenz/p/9498713.html
Copyright © 2020-2023  润新知