【复健内容】NOIP2020 题解

T1

模拟即可,注意到路径长度至多为 \(12\) 而度数不大于 \(5\),所以分母只含有 \(2,3,5\) 三个素因子并且不大于 \(3^{11 }\times 4^{11} \times 5^{11}\),然而这个数刚好爆了 \(\text{unsigned long long}\),所以必须高精度。

但是由于分母的特殊性,可以只用维护分母的质因数分解式,免于写高精 \(\text{gcd}\)

T2

枚举 \(C\),问题就转变成了对每个前缀的所有严格周期的满足关于对应 \(F\) 条件的前缀求和。

一个著名的结论是一个串的所有严格周期必然是它最短严格周期的倍数,同时最短严格周期如果不是它本身,则必然等于 \(\text{len-Lborder}\),所以做一遍 \(\text{KMP}\) 就行了。

统计答案的话,调和级数枚举一下,你需要支持插入和求 \(\text{rank}\),但是值域很小,暴力更新前缀和即可。

T3

比较神的题。

首先你可以借助一个满栈和一个空栈完成这两个操作:

  1. 将一个栈里面指定的一些元素提到栈顶。

  2. 将两个栈中指定的一些元素交换。

具体实现可以看一下代码。

借助操作2你可以实现对两个栈进行“排序”,把归并排序套上去就行了。

\(n=2\) 特判,具体的说,用两次操作1就行了。

T4

每一维分开考虑,发现在第一轮之后每一维被弹出去的元素是循环的。

那么 \(O(n+\sum w)\) 的做法是显然的,直接找出元素被弹出去的顺序然后模拟即可,统计答案就是每个元素被弹出去的时候的其他维元素个数乘积之和。

\(\sum w\) 比较大的时候,考虑每个元素每轮被弹出去的时候贡献的变化情况,发现这是一个幂和,由于 \(k\le 3\),直接套公式完事了。

posted @ 2021-07-04 01:47  sjkmost  阅读(26)  评论(0编辑  收藏  举报