#P3174. Alignment of the Planets

Alignment of the Planets

题目描述

实际上,本题是关于N(1 ≤ N ≤ 770)头编号为1..N的奶牛在牧场中的共线问题,牧场大小约为15,000×15,00015,000×15,000单位。所有奶牛的放牧位置均为标准x,y坐标系下的整数坐标(坐标范围为0..15,0000..15,000)。

贝茜抬头发现自己恰好与萨拉和朱莉在同一直线上。她想知道牧场中存在多少组三头共线的奶牛。

给定所有奶牛的位置(无两头奶牛位于同一位置),找出所有恰好共线的三头奶牛的集合。记录这些集合时,需将每个集合中的奶牛按ID编号从小到大排序。然后将所有集合按三个ID编号(从小到大)排序,若编号相同则依次比较第二个和第三个ID编号。

输入格式

第1行:单个整数N
22..N+1N+1行:第i+1行用两个以空格分隔的整数描述第i头奶牛的位置,分别为其x坐标和y坐标。

输出格式

11行:单个整数,表示恰好共线的三头奶牛的集合数量。例如,一组四头共线的奶牛会产生(43)=4\binom{4}{3}=4组三头共线的集合。
22..??行:每行包含三个用空格分隔的整数,表示共线奶牛的ID编号(按升序排列)。所有行需按ID字典序排序,若没有符合条件的集合则不输出后续行。

输入示例1

8  
0 0  
0 4  
1 2  
2 4  
4 3  
4 5  
5 1  
6 5  

输出示例1

1  
1 3 4  

提示

注意避免浮点运算。浮点相等比较几乎无法达到预期效果。

样例解释

八头奶牛在网格上的放牧位置如下(左下角部分):

. . . . * . *   
* . * . . . .   
. . . . * . .   
. 3 . . . . .   
. . . . . * .  
1 . . . . . .  

数字标记了共线奶牛的ID:

. . . . * . *   
* . 4 . . . .   
. . . . * . .   
. 3 . . . . .   
. . . . . * .  
1 . . . . . .  

此处的网格图示中,. 表示空白位置,* 表示奶牛位置,数字直接标注了共线奶牛的ID(如1、3、4),直观展示了它们在网格中的相对位置关系。

来源

USACO 2005年12月青铜组