UVA184 Laser Lines

题目描述

一家计算机芯片制造公司开发了一种芯片。这种芯片上有多个节点,节点之间发射光学信号以完成通讯。显然,如果有 $3$(或以上)个节点位于同一条直线上,通讯就会受阻。 芯片可以看做一个平面直角坐标系,每个节点都用一个有序数对表示位置,$(i,j)$ 代表第 $i$ 行第 $j$ 列。保证 $0\le i,j\le9999$,且因为技术原因,节点不会出现在 $(0,0)$ 上。 节点没有大小,位置都非常精确,可以保证不会出现任何误差。 保证不会同时有超过 $10$ 个节点位于同一条直线上。

输入格式

输入包含多行,包含多个测试用例。一个测试用例**可能占用一行,也可能占用多行**。每个测试用例中有偶数个整数,第一个整数代表第一个节点的横坐标,第二个整数代表第一个节点的纵坐标,以此类推。 换句话说,对于第 $i$ 个节点,横坐标为第 $i\times2-1$ 个整数,纵坐标为第 $i\times2$ 个整数。 一个测试用例以两个整数 $0$ 结束,输入也以两个整数 $0$ 结束。 保证每个测试用例最多有 $100$ 个节点。

输出格式

对于每组测试用例,有两种情况: 1. 没有找到任意 $3$(或以上)个节点位于同一条直线上,此时输出一行 `No lines were found` 即可。 2. 找到任意 $3$(或以上)个节点位于同一条直线上。 此时,先输出一行 `The following lines were found:`,然后再输出多行。每一行代表每一条直线,每一行有几个有序数对(每个有序数对中间没有字符),代表这条直线上的所有节点。 每一个节点按照横坐标从小到大的顺序排列,如果横坐标相同,则按照纵坐标从小到大的顺序排列。 每一条直线按照**第一个**节点的横坐标从小到大的顺序排列,如果横坐标相同,则按照纵坐标从小到大的顺序排列。 在输出时,每一个有序数对的横坐标与纵坐标的输出宽度为 $4$,比如,`(4,8)` 是错误输出,`( 4, 8)`(数字 $4$ 前和数字 $8$ 前都有 $3$ 个空格,由于 Markdown 渲染原因可能只显示 $1$ 个)才是正确输出。