暑假集训 杭电多校 Round 5
「1001」 Typhoon
签到题,遍历每条线段到每个点的最小距离即可。
时间复杂度:\(O(mn)\)
空间复杂度:\(O(m)\)
1 |
|
「1002」 GCD Magic
首先,显然有 \(gcd(2 ^ i - 1, 2 ^ j - 1)\) = \(2 ^ {gcd(i, j)} - 1\) ,所以原表达式只与 \(gcd(i, j)\) 有关,所以我们只用枚举全部 \(i\) 和 \(j\) 的最大公约数的数量即可。
对于 \(i、j\) 满足 \(1 \leq i、j \leq n\) 而言,满足 \(gcd(i, j) = t\) 的数量为: \[ \begin{array}{} \sum_{i = 1} ^ n \sum_{j = 1} ^ n [gcd(i, j) = t] \\ = \sum_{i = 1} ^ {[\frac{n}{t}]} \sum_{j = 1} ^ {[\frac{n}{t}]} [gcd(i, j) = 1] \\ = \sum_{i = 1} ^ {[\frac{n}{t}]} \sum_{j = 1} ^ {[\frac{n}{t}]} \sum_{d | gcd(i, j)} \mu(d) \\ = \sum_{d = 1} ^ {[\frac{n}{t}]} \mu(d) \sum_{i = 1} ^ {[\frac{n}{t}]} \sum_{j = 1} ^ {[\frac{n}{t}]} [d | gcd(i, j)] \\ = \sum_{d = 1} ^ {[\frac{n}{t}]} \mu(d) [\frac{n}{td}] ^ 2 \end{array} \] 要计算的表达式可化为 \(f(t) = (2 ^ t - 1) ^ k\) ,因此最终要求的表达式如下所示: \[ \sum_{t = 1} ^ n f(t) \sum_{d = 1} ^ {[\frac{n}{t}]} \mu(d) [\frac{n}{td}] ^ 2 \] 令 \(T = dt\) ,交换求和顺序,先枚举 \(T\) ,上式可转化为: \[ \sum_{T = 1} ^ n [\frac{n}{T}] ^ 2 \sum_{d | T} f(d) \mu(\frac{T}{d}) \] 由于题目中的 \(n\) 很大,所以这里考虑使用杜教筛来计算 \(\sum_{d | T} f(d)\mu(\frac{T}{d})\) 的前缀和,然后使用分块除法来快速求出上式的值。
考虑狄利克雷卷积,\(f * \mu * 1 = f * \epsilon = f(T)\) ,设 \(S(n) = \sum_{T = 1} ^ n \sum_{d | T} f(d) \mu(\frac{T}{d})\) 则有: \[ S(n) = \sum_{T = 1} ^ n f(T) - \sum_{d = 2} ^ n S([\frac{n}{d}]) \]
\[ f(T) = (2 ^ T - 1) ^ K = \sum_{i = 0} ^ K C_{K} ^ i 2 ^ {Ti} (-1) ^ {K - i} \]
此处就是一个等比数列求和。
时间复杂度:\(O(K \sqrt n)\)
1 |
|