CF1483B Playlist
题目描述
Arkady 有一个播放列表,最初包含 $n$ 首歌曲,按它们在播放列表中出现的顺序从 $1$ 到 $n$ 编号。Arkady 从第 $1$ 首歌开始,依次听播放列表中的歌曲。播放列表是循环的,也就是说,在听完最后一首歌后,Arkady 会从头开始继续听。
每首歌有一个类型 $a_i$,是一个正整数。假设 Arkady 听完类型为 $y$ 的歌曲,上一首听的是类型为 $x$ 的歌曲。如果 $\operatorname{gcd}(x, y) = 1$,他会把刚听完的那首(类型为 $y$)从播放列表中删除。之后他会正常继续听歌,跳过已删除的歌曲,并且忘记之前听过的所有歌曲。换句话说,删除一首歌后,他不能立刻删除下一首歌。
这里 $\operatorname{gcd}(x, y)$ 表示整数 $x$ 和 $y$ 的最大公约数。
例如,如果初始歌曲类型为 $[5, 9, 2, 10, 15]$,那么播放列表的变化如下:
\[
5, 9, 2, 10, 15
\to
5, 9, 2, 10, 15
\to
5, 2, 10, 15
\]
(因为 $\operatorname{gcd}(5, 9) = 1$)
\[
\to
5, 2, 10, 15
\to
5, 2, 10, 15
\to
5, 2, 10, 15
\to
5, 2, 10, 15
\to
5, 2, 10, 15
\to
5, 10, 15
\]
(因为 $\operatorname{gcd}(5, 2) = 1$)
\[
\to
5, 10, 15
\to
5, 10, 15
\to
\ldots
\]
加粗的数字表示最近两首播放的歌曲。注意,每当一首歌被删除后,Arkady 会忘记之前听过的所有歌曲。
给定初始播放列表,请你确定最终会被删除的歌曲编号,以及它们被删除的顺序。
输入格式
每个测试包含多个测试用例。第一行包含测试用例数 $t$($1 \le t \le 10\,000$)。接下来是每个测试用例的描述。
每个测试用例的第一行包含一个整数 $n$($1 \le n \le 10^5$),表示歌曲数量。
第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \le a_i \le 10^9$),表示每首歌的类型。
保证所有测试用例中 $n$ 的总和不超过 $10^5$。
输出格式
对于每个测试用例,输出一行。首先输出一个整数 $k$,表示被删除的歌曲数量。接着输出 $k$ 个不同的整数,表示被删除的歌曲编号,顺序为它们被删除的顺序。
说明/提示
第一个测试用例的解释见题面。
第二个测试用例,播放列表变化如下:
\[
1, 2, 4, 2, 4, 2
\to
1, 2, 4, 2, 4, 2
\to
1, 4, 2, 4, 2
\]
(因为 $\operatorname{gcd}(1, 2) = 1$)
\[
\to
1, 4, 2, 4, 2
\to
1, 4, 2, 4, 2
\to
1, 4, 2, 4, 2
\to
1, 4, 2, 4, 2
\to
1, 4, 2, 4, 2
\to
4, 2, 4, 2
\]
(因为 $\operatorname{gcd}(2, 1) = 1$)
\[
\to
4, 2, 4, 2
\to
\ldots
\]
第三个测试用例,播放列表变化如下:
\[
1, 2
\to
1, 2
\to
1
\]
(因为 $\operatorname{gcd}(1, 2) = 1$)
\[
\to
1
\to
1
\]
(Arkady 连续两次听同一首歌)
\[
\to
\]
(因为 $\operatorname{gcd}(1, 1) = 1$)
第四个测试用例与第三个测试用例在删除第二首歌后相同。
第五个测试用例,反复听同一首歌,但由于 $\operatorname{gcd}(2, 2) \ne 1$,所以不会被删除。
由 ChatGPT 4.1 翻译