#L3392. 「2020-2021 集训队作业」大鱼划水
「2020-2021 集训队作业」大鱼划水
题目描述
你是大鱼,一天你在海里划水。
海可以看成一个坐标平面,海上有 座小岛,第 座小岛的坐标为 ,上面居住着 个人。
你喜欢沿着平行于 轴或 轴的方向进行划水,你觉得一条划水的路线是快乐的,如果它满足如下条件:
- 该路线平行于 轴,从纵坐标负无穷远处划到正无穷远处;或该路线平行于 轴,从横坐标负无穷远处到正无穷远处。
- 沿着你划水的方向,至少经过一座小岛。
- 你会求出沿途经过的所有小岛的人数的最大公约数,这个数最终为 。 (ps: 特别地,定义一个数的最大公约数就是它本身)
你希望有尽可能多的快乐的划水路线,于是你找到了水神,希望她帮你控制这片海域来完成你的目标。
不幸的是,水神不能改变这些小岛的坐标,她只能调整每座小岛的人数,且需要保持 座小岛的人数恰为 的一个排列。
不过水神的计算能力不怎么好,因此她需要你给出一组方案,然后她会按照你的方案来重新分配这 座小岛的人数。
因此你的任务是:找出一组调整小岛人数的方案,使得在满足水神的条件下,快乐的划水路线数尽可能多。
输入格式
本题包含多组数据。
第一行包含一个正整数 ,表示数据组数。
对于每组数据,第一行包含一个正整数 ,表示小岛的个数。
接下来 行,每行两个正整数 ,表示一座小岛的坐标。保证所有小岛的坐标两两不同。
输出格式
对于每组数据,输出两行:
- 第一行输出一个整数,表示快乐的划水路线的数量的最大可能值。
- 第二行输出 个整数,表示每座小岛的人数,按照输入的顺序输出。你需要保证你输出的 个数恰为 的排列。
如果有多组解,输出任意一组均可。
注意:如果你对于所有的数据,第一行的输出均正确,可以获得该子任务 的分数。但是如果你只要这个部分分,你也要在第二行输出一个排列 (但不需要满足你的答案)。
样例 1
输入
2
4
1 1
1 2
2 1
2 2
5
1 1
2 2
4 4
8 8
16 16
输出
4
1 2 4 3
2
1 2 3 4 5
样例 1 解释
- 对于第一组数据: 快乐的划水路线有四条:(沿途经过的小岛人数分别为 )、(人数分别为 )、(人数分别为 )、(人数分别为 )。
- 对于第二组数据: 快乐的划水路线有两条:(人数分别为 )、(人数分别为 )。
数据范围与提示
对于所有的测试点,均满足 ;;,对于 ,保证 。
具体的子任务的数据规模见下表:
| 子任务 | 分值 | 其他性质 | |||
|---|---|---|---|---|---|
| 1 | 4 | 无 | |||
| 2 | |||||
| 3 | |||||
| 4 | |||||
| 5 | 8 | 无 | |||
| 6 | |||||
| 7 | 无 | ||||
| 8 | 保证所有小岛构成一个 -连通块 | ||||
| 9 | 4 | 无 | |||
| 10 | 8 | 保证每条平行于坐标轴的直线经过的小岛个数不等于 | |||
| 11 | 4 | 无 | |||
| 12 | 8 | 保证每条平行于坐标轴的直线经过的小岛个数等于 或 | |||
| 13 | 4 | 无 | |||
| 14 | 8 | 保证所有小岛的坐标在可行域内均匀随机 | |||
| 15 | 4 | 无 | |||
| 16 | 8 | ||||
| 17 | 4 | ||||
注:两个整点 是 -连通的,当且仅当存在一个整点序列 ,使得 ()。
注意:如果你对于所有的数据,第一行的输出均正确,可以获得该子任务 的分数。但是如果你只要这个部分分,你也要在第二行输出一个排列 (但不需要满足你的答案)。(很重要所以说两遍)