补题 We Were Both Children
补题 We Were Both Children
题目描述
Mihai and Slavic were looking at a group of $ n $ frogs, numbered from $ 1 $ to $ n $ , all initially located at point $ 0 $ . Frog $ i $ has a hop length of $ a_i $ .
Each second, frog $ i $ hops $ a_i $ units forward. Before any frogs start hopping, Slavic and Mihai can place exactly one trap in a coordinate in order to catch all frogs that will ever pass through the corresponding coordinate.
However, the children can’t go far away from their home so they can only place a trap in the first $ n $ points (that is, in a point with a coordinate between $ 1 $ and $ n $ ) and the children can’t place a trap in point $ 0 $ since they are scared of frogs.
Can you help Slavic and Mihai find out what is the maximum number of frogs they can catch using a trap?
输入格式
The first line of the input contains a single integer $ t $ ( $ 1 \le t \le 100 $ ) — the number of test cases. The description of test cases follows.
The first line of each test case contains a single integer $ n $ ( $ 1 \leq n \leq 2 \cdot 10^5 $ ) — the number of frogs, which equals the distance Slavic and Mihai can travel to place a trap.
The second line of each test case contains $ n $ integers $ a_1, \ldots, a_n $ ( $ 1 \leq a_i \leq 10^9 $ ) — the lengths of the hops of the corresponding frogs.
It is guaranteed that the sum of $ n $ over all test cases does not exceed $ 2 \cdot 10^5 $ .
输出格式
For each test case output a single integer — the maximum number of frogs Slavic and Mihai can catch using a trap.
样例 #1
样例输入 #1
1 | 7 |
样例输出 #1
1 | 3 |
提示
In the first test case, the frogs will hop as follows:
- Frog 1: $ 0 \to 1 \to 2 \to 3 \to \mathbf{\color{red}{4}} \to \cdots $
- Frog 2: $ 0 \to 2 \to \mathbf{\color{red}{4}} \to 6 \to 8 \to \cdots $
- Frog 3: $ 0 \to 3 \to 6 \to 9 \to 12 \to \cdots $
- Frog 4: $ 0 \to \mathbf{\color{red}{4}} \to 8 \to 12 \to 16 \to \cdots $
Frog 5: $ 0 \to 5 \to 10 \to 15 \to 20 \to \cdots $
Therefore, if Slavic and Mihai put a trap at coordinate $ 4 $ , they can catch three frogs: frogs 1, 2, and 4. It can be proven that they can’t catch any more frogs. In the second test case, Slavic and Mihai can put a trap at coordinate $ 2 $ and catch all three frogs instantly.
题解
题目解析
一开始想到 $O(n^2)$ 的写法, 但是显然这个数据范围并不能AC. 我们换种想法: 同一种跳跃长度如果记录了其有多少个青蛙的话只需要扫一遍, 我们只需要 $1\sim n$ 的每个跳跃长度都只扫一遍就好了. 并且扫的时候步长会慢慢变大.
事实上, 其遍历次数为:
时间复杂度就是这个了. 由数学分析我们可得 $\sum\frac{1}{k}$ 的阶和 $\ln n$ 的是相同的嘛. 可以用 $\text{stolz}$ 定理求, 我这里就不多提了.
AC代码
1 |
|