• Codeforces 1314 题解


    这场整体质量感觉可以算 2020 年度(目前为止)最垃圾。

    A

    按数值从小到大扫描,维护一个优先队列,每遇到一个数加入队列,每次数值发生 (+1) 时弹掉队列中价值最大元素,然后把此时队列中所有元素的价值和类加进答案。
    时间复杂度 (O(nlog n)).
    代码: 78541690

    B

    这题看起来最难以处理的就是编号问题,所以就从编号问题入手,可以发现当场上还剩下 (2^i) 个人时,将所有人按编号从小到大划分为 (2^{i-1}) 个大小相等的组,则每组中恰有一人在 Upper Bracket,恰有一人在 Lower Bracket. 每场比赛会合并相邻的两个组。
    于是就可以 DP 了:设 (f[i][u][x][y] (x,yin {0,1})) 表示第 (i)(u) 这一组,Upper 和 Lower 的人分别是否被关注即可。
    时间复杂度 (O(2^n)).
    代码: 79378015

    C

    把所有子串拎出来排序,二分答案。每次就是要求将 (s) 划分为 (m) 个连续子串,且每个子串字典序都不小于 ([L,R]) 的方案数。(串一模一样的时候没有必要再区分大小)
    直接 DP 是 (O(n^3)) 的,但是注意到一个点能转移到的是一段区间,于是就可以 (O(1)) 转移。
    时间复杂度 (O(n^2log n)).
    代码: 79516172

    D

    无奇环等价于任何一个点都不能同时出现在奇数和偶数的位置上。设 (1) 号点的位置是 (0),可以爆搜偶数位置上的值,然后就是要对 ((i,j))(min_k(dis_{i,k}+dis_{k,j})),其中 (k) 有不超过 (frac{m}{2}) 个位置是被 ban 的。于是对每个 ((i,j)) 预处理一下前 (4) 大就可以完成。
    时间复杂度 (O(n^{frac{m}{2}-1}m^2)),常数很小。
    代码: 78551177
    题解还给了一种随机做法:大概每次把所有的点以某种随机方式染成二分图,随机 (512cdot 20) 次,最优解在至少一次的随机中出现在二分图两侧的概率约为 (1-2 imes 10^{-9}).

    E

    不难发现 (|f^2(A)|le sqrt{2|A|}).
    考虑如何判断一个终止状态是否合法,只需要求出初始状态最少有多少个元素即可,那么肯定是每次贪心地展开,设 (f^k(A)) 从大到小排序后为 (b_1,...,b_l),则 (f^{k-1}(A)) 中有 (b_i)(i). 把按这种方式贪心展开的函数叫做 (g(A)). 很容易推知 (|g(A)|=sum^l_{i=1} a_i,|g^2(A)|=sum^l_{i=1}ia_i).
    那么对于 (K=1)(K=2) 的情况,可以直接 DP 解决,使用 DP 划分数的经典方法,有一个序列初始为 ({1}),每次给最后面添加一个 (1) 或者给所有数都 (+1). 时间复杂度 (O(n^2)).
    对于 (Kge 3) 的情况,必定有 (|f^k(A)|le sqrt{2n}le 63). 于是可以爆搜划分数,然后贪心展开。一个很有用的剪枝是,如果任何时候展开的大小超过 (n) 就没有必要继续搜下去了,加上这个之后运行时间从 (1918 ext{ms}) 变成了 (78 ext{ms})

    [sum^{63}_{i=1}P(i)approx 10^7, P(64)approx 2 imes 10^6 ]

    时间复杂度 (O(n^2+P(sqrt {2n}) ext{poly}(n))),其中 ( ext{poly}(n)) 部分很小。
    代码: 79614806

    F

    nim 积意义下的离散对数。下面默认求 nim 的复杂度是 (O(log^2 W)).
    考虑整个域的大小是 (W=2^{64}-1),首先显然有一个 (O(sqrt Wlog^2 W)) 的 BSGS 做法。
    显然 (W) 不是质数,分解一下发现 (W=3 imes 5 imes 17 imes 257 imes 641 imes 65537 imes 6700417),每一个质因子都不大,可以考虑计算答案在模每个质因子意义下的值,最后 CRT 合并。
    设当前处理的质因子是 (P). (a^{igodot kP+r}=b Leftrightarrow a^{igodot kW+frac{W}{P}cdot r}=b^{igodot frac{W}{P}} Leftrightarrow (a^{igodot frac{W}{P}})^{igodot r}=b^{igodot frac{W}{P}}),所以就是要解 ((a^{igodot frac{W}{P}})^{igodot r}=b^{igodot frac{W}{P}}). 直接 BSGS 即可。
    时间复杂度 (O(sum sqrt{P_i}log^2 W)).
    代码: 79635282

  • 相关阅读:
    HTML5-拖拽
    POJ1182食物链(并查集)
    欧拉函数之HDU1286找新朋友
    Another kind of Fibonacce(矩阵快速幂,HDU3306)
    我的第一道java_A+B
    bestcoder#33 1002 快速幂取余+模拟乘,组合数学
    快速幂模版
    bestcoder#33 1001 高精度模拟
    poj2446_二分图
    poj3984_bfs+回溯路径
  • 原文地址:https://www.cnblogs.com/suncongbo/p/12864397.html
Copyright © 2020-2023  润新知