#P2048. Monster Trap
Monster Trap
描述
很久很久以前,当人们仍然相信魔法的时候,有一位伟大的巫师名叫Aranyaka Gondlir。在深林中经过二十年的艰苦修炼后,他终于掌握了终极魔法,并决定离开森林,回到他的家乡。
当他回到家乡的村庄时,Aranyaka对眼前的极度荒凉感到非常惊讶。村庄被一种阴郁的气氛笼罩着,甚至连风的低语都能吓到村民们。这里已经完全失去了往日的生机。
到底发生了什么?很快,他认出了一个邪恶怪物的明显迹象——这种怪物是不死的。即使是伟大的巫师也无法杀死它,因此他决定用魔法将其封印。Aranyaka可以施展一个咒语来制造一个怪物陷阱:只要他用魔法杖在地上画出一条线,这条线就会变成一道任何怪物都无法跨越的屏障墙。由于他只能画直线,因此他需要画几条线才能完成一个怪物陷阱,也就是说,用魔法屏障墙将怪物围起来。如果屏障墙之间有缝隙,怪物很容易就会从缝隙中逃走。
例如,左边的图展示了一个没有任何缝隙的完整的怪物陷阱,其中“M”表示怪物的位置。相比之下,右边的图中的屏障墙几乎已经完成,但仍然存在一个漏洞。
你的任务是编写一个程序,判断巫师是否成功地封印了怪物。
输入
输入包含多组数据,每组数据的格式如下。
n
x1 y1 x01 y01
x2 y2 x02 y02
...
xn yn x0n y0n
每组数据的第一行包含一个正整数 ,表示巫师画出的线段数量。接下来的 行每行包含四个整数 、、 和 ,分别表示由线段连接的两个点 和 的 和 坐标。你可以假设所有线段的长度均不为零。你还可以假设 不超过100,所有坐标均在 -50 到 50(含)之间。为了方便起见,坐标系的安排使得怪物始终位于原点 (0, 0)。巫师永远不会画出穿过 (0, 0) 的线。
你可以假设任意两条线段最多只有一个交点,且没有任何三条线段共享同一个交点。你还可以假设任意两个交点之间的距离大于 。
包含零的输入行表示输入结束。
输出
对于每组数据,在一行中打印“yes”或“no”。如果完成了怪物陷阱,打印“yes”。否则,即如果存在漏洞,打印“no”。
输入数据 1
8
-7 9 6 9
-5 5 6 5
-10 -5 10 -5
-6 9 -9 -6
6 9 9 -6
-1 -2 -3 10
1 -2 3 10
-2 -3 2 -3
8
-7 9 5 7
-5 5 6 5
-10 -5 10 -5
-6 9 -9 -6
6 9 9 -6
-1 -2 -3 10
1 -2 3 10
-2 -3 2 -3
0
输出数据 1
yes
no
来源
2003年日本,会津