Streaming#6模拟赛题解
A. 九九归一
题意:给出整数 $n$ 和 $q$ 个小于 $n$ 的正整数。一个正整数 $a$ 在模 $n$ 意义下自乘的最小循环节恰好等于 $\varphi(n)$ 时我们称 $a$ 是”神奇的“,问这 $q$ 个正整数中哪些数是神奇的。
思路:(这个题是真的难!)
首先我们可以暴力检查对于每一个 $d | \varphi(n)$ 是否有 $a ^ d \bmod n = 1$ ,然后就会获得$80$ 分的好成绩(
然后我们考虑对上述解法进行优化:
考虑到只要一个 $d | \varphi(n)$ 满足 $a ^ d \bmod n = 1$ ,则 $d$ 的所有倍数一样满足这个条件,这样就可以减少判断的次数了
所以考虑枚举 $\varphi(n)$ 的质因数,若有
则显然不成立,这样可以大幅度降低复杂度。
注意:最后还是要判断 $a ^ {\varphi(n)} \bmod n$ 是否为 $1$ 。
代码:
1 |
|
B. LCA的统计
题意:给出一棵 $n$ 个结点的有根树,每个结点 $i$ 的权值为 $w _ i$,求
思路:这很显然是一道树形 $\text{DP}$ ,我们设 $f _ i$ 表示以 $i$ 为根节点的子树的答案
设 $sum _ i$ 为以 $i$ 为根节点的子树已遍历过的结点的权值之和,然后有以下转移
统计完答案后要更新 $sum _ u$ 。
最后对于每个 $u$ 要记得统计 $i = j = u$ 的情况。
注意:本题大多数运算在模意义下进行,请注意取模。
代码:
1 |
|
C. 四驱兄弟
题意:给出 $n$ 个人, $m$ 辆赛车,第 $i$ 辆车预计完成比赛的时间为 $a _ i$ ,每辆车对应两个点,可以选择连边或不连边。
若连边则完成比赛的时间为 $a _ i$ ,否则为 $\infty$ 。
问在不形成环的情况下第 $1, 2, …, n$ 名的成绩最小是多少。
思路:很显然是一个最小生成树,但它为什么是正确的……我也不知道。只要把完成比赛的时间看做两点之间所连边的边权,然后做最小生成树就行了。字符串的处理方面哈希和暴力弄都可以。
注意:哈希不能挂。
代码:
1 |
|
总结
其实很可惜, $\text{B}$ 题因为一个很小的问题错丢了 $10pts$ ,然后 $\text{C}$ 题哈希的时候 $base$ 用 $998244353$ 被卡了(这么大的 $base$ 其实也是我作死),然后丢了 $30pts$ ,于是 $200pts$ 变成了 $160pts$ 。
同机房的 $\text{ViXbob}$ 在很短的时间内就 $\text{AK}$ 了,说明其实也并不是那么难,没做好……果然还是我太菜了吧。然后下次再作死我就自行去世!