USACO Training 3.4.1 Closed Fences闭合的栅栏 题解与分析

这篇博客详细介绍了USACO竞赛题目Closed Fences(闭合的栅栏)的题意、解题思路和代码实现。内容包括判断合法闭合栅栏、找出可见的栅栏线段,并提供了判断线段相交的算法。通过实例和代码解释,帮助读者理解解题过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

USACO 3.4.1 Closed Fences题解

      首先,很感谢NOCOW中分析的提示以及ID: lorabit1的程序。

一:题意

Closed Fences闭合的栅栏

描述

一个闭合的栅栏是平面上的一些不相交的首尾相连的线段形成的多边形,有N个角(顶点) (3 < N < 200)。 顶点不重合,它以逆时针方式以数组{xi, yi}给出(i=1,2,...,N)。

每一对相邻的顶点都是一条栅栏。因此共有N条栅栏 (定义xN+1=x1, yN+1=y1)。

这里有一个栅栏的例子和一个点x,y:

                        * x3,y3

                x5,y5  / \

   x,y *          *   /   \

                 / \ /     \

                /   *       \

          x6,y6*   x4,y4     \

               |              \

               |               \

          x1,y1*----------------* x2,y2

请编写一个程序实现下面的任务:

  • 检查输入的顶点列表{xi,yi}, i=1,2,...,N, 判断它是否为一个合法的闭合栅栏。
  • 找出所有可以被站在点(x,y)处的人所能看到的栅栏(忽略人的高度),因为有的栅栏会被另外的栅栏所挡住。

只有当存在从(x,y)发射的一条射线第一个穿过栅栏i时,栅栏i是可以被看见的。如果栅栏是平行于目光的,它并不认为是可以看见的。在上面的例子里,线段[x3,y3]-[x4,y4], [x5,y5]-[x6,y6], [x6-y6]-[x1,y1]是可以被(x,y)看见的。格式

PROGRAM NAME: fence4

INPUT FORMAT:

(file fence4.in)

第一行: N, 表示闭合栅栏的顶点数。

第二行: 两个整数x和y,表示观测者的位置。两个整数都是16位的。即2^16,在longlong或longint范围内。

第3到N+2行: 每行一对整数(x,y)表示对应闭合栅栏的第k个顶点的坐标。坐标以逆时针顺序给出。整数绝对值不超过1000。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值