本题与「工位相位巡检」描述的计算任务一致。按输入格式读入数据后,沿用原题解的算法即可。
使用埃拉托斯特尼筛预处理每个编号是否为质数:
一条从编号 1 开始向右无限延伸的工位流水线。每个工位具有相位 0 或相位 1。初始时,编号为质数的工位处于相位 1,其余工位处于相位 0。
称一个大于 1 的正整数为质数,当且仅当它除了 1 和自身以外没有其他正因数。特别地,1 不是质数。
共有 n 名调试员依次上线,每人都从工位 1 出发。给定长度为 n、仅由字符 0 与 1 构成的指令串 s。第 i 名调试员按顺序执行 s 的前 i 条指令:
0 时,移动到当前位置严格右侧、编号最小且当前相位为 0 的工位;1 时,移动到当前位置严格右侧、编号最小且当前相位为 1 的工位。第 i 名调试员完成其 i 条指令后,将其所在工位的相位翻转(相位 0 变为 1,相位 1 变为 0)。后上线的调试员会受到此前相位翻转的影响。
请输出所有最终相位与初始相位不同的工位编号,按从小到大排列。
约束:测试数据组数不超过 104。每组数据中指令串的长度不超过 105。单个测试文件中所有指令串长度之和不超过 106。
第一行输入一个整数 t(1≤t≤104),表示测试数据组数。
对于每组测试数据:
第一行输入一个整数 n(1≤n≤105),表示调试员人数以及指令串的长度。
第二行输入一个长度为 n、仅由字符 0 与 1 构成的字符串 s,表示指令。
保证单个测试文件中所有 n 之和不超过 106。
对于每一组测试数据,输出两行: 第一行输出一个整数 l,表示最终相位与初始相位不同的工位数量。 第二行输出 l 个互不相同的正整数,表示这些工位的编号,按从小到大输出。若 l=0,则第二行不输出任何数字,但仍需输出一个空行。
输入
1
1
0
输出
1
4
说明
按题意模拟计算得到。
输入
1
1
0
2
输出
1
4
说明
按题意模拟计算得到。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册