设扫描周期为 H。
如果某个配方的步长 pj 能被 H 整除,那么从任意起点开始扩散后,只会覆盖与起点模 H 相同的工位。因此一个配方只能占用一个余数位置。
所以对于固定的 H:
装配轨道上的工位排成一条没有尽头的直线。手头共有 c 种喷码配方,第 j 种配方绑定步长 pj。打标约定如下:只要工位 y 被第 j 种配方覆盖,工位 y−pj 与工位 y+pj 也得用同一种配方覆盖(把这条约定不断套用下去)。
换个说法,工位的下标取遍全体整数 (…,−2,−1,0,1,2,…),向两侧没有边界。一旦下标 y (y∈Z) 打上第 j 种配方,下标 y−pj 与 y+pj 同样要打该配方,并把同一约定一直套用开。
喷码头有固定扫描节奏,因此允许你先定下一个正整数 H 当作“扫描周期”。H 一经确定,下面两条要一起成立:
任意一个工位最多承接一种配方,部分工位可以空着不打。目标是让真正派上用场的配方种数尽量大,并给出这个最大种数。
一份测试里会有若干组数据。首行单独给出整数 g(1≤g≤2×105),表示一共有多少组。
随后共 g 行,每行对应一组:先给出整数 c(1≤c≤2×105),同一行内紧接着 c 个整数 p1,p2,…,pc(1≤pj≤2×105)。
保证全部组内 c 相加不超过 3×105。
输出一行,包含 g 个整数,相邻两项以空格分隔,依次表示每一组最多能派上用场的配方种数。
输入
2
6 2 4 6 8 10 12
5 3 3 6 9 15
输出
3 3
说明
第一组取 H=4。步长为 4 的倍数的配方是 4,8,12,共三种。扫描周期等于 4 时至多安排 4 路互不冲突的起喷,故这一选择能启用 3 种。其余 H 都到不了 3,因此答案是 3。
第二组取 H=3。五个步长都能被 3 整除,但扫描周期只有 3 个互异剩余类,故最多启用 3 种。其余 H 更差,答案也是 3。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册