CF1482D.Playlist
普及+/提高
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
Arkady 有一个播放列表,最初包含 n 首歌曲,按它们在列表中出现的顺序从 1 到 n 编号。Arkady 从第 1 首歌开始,依次听播放列表中的歌曲。该播放列表是循环的,即听完最后一首歌后,Arkady 会从头开始继续听。
每首歌有一个类型 ai,是一个正整数。假设 Arkady 听完一首类型为 y 的歌,上一首听的是类型为 x 的歌。如果 gcd(x,y)=1,他会将刚听完的这首类型为 y 的歌从播放列表中删除。之后他会正常继续听歌,跳过已删除的歌曲,并且忘记之前听过的所有歌曲。换句话说,删除一首歌后,他不能立即删除下一首歌。
这里 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
]
(因为 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
]
(因为 gcd(5,2)=1)
[
\to
5, 10, 15
\to
5, 10, 15
\to
\ldots
]
加粗的数字表示最近播放的两首歌。注意,每当删除一首歌后,Arkady 会忘记之前听过的所有歌曲。
给定初始播放列表,请你确定最终被删除的歌曲编号及其删除顺序。
输入格式
每个测试用例包含多组数据。第一行包含一个整数 t(1≤t≤10000),表示测试用例的数量。
每个测试用例的第一行包含一个整数 n(1≤n≤105),表示歌曲数量。
第二行包含 n 个整数 a1,a2,…,an(1≤ai≤109),表示每首歌的类型。
保证所有测试用例中 n 的总和不超过 105。
输出格式
对于每个测试用例,输出一行。首先输出一个整数 k,表示被删除的歌曲数量。接着输出 k 个不同的整数,按删除顺序输出被删除的歌曲编号。
输入输出样例
输入#1
5 5 5 9 2 10 15 6 1 2 4 2 4 2 2 1 2 1 1 1 2
输出#1
2 2 3 2 2 1 2 2 1 1 1 0
说明/提示
第一组测试数据的解释见题面。
第二组测试数据,播放列表变化如下:
[
1, 2, 4, 2, 4, 2
\to
1, 2, 4, 2, 4, 2
\to
1, 4, 2, 4, 2
]
(因为 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
]
(因为 gcd(2,1)=1)
[
\to
4, 2, 4, 2
\to
\ldots
]
第三组测试数据,播放列表变化如下:
[
1, 2
\to
1, 2
\to
1
]
(因为 gcd(1,2)=1)
[
\to
1
\to
1
]
(Arkady 连续两次听同一首歌)
[
\to
,
]
(因为 gcd(1,1)=1)
第四组测试数据与第三组在删除第二首歌后相同。
第五组测试数据中,反复听同一首歌,但由于 gcd(2,2)=1,所以不会被删除。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?