2021 RoboCom 世界机器人开发者大赛

您所在的位置:网站首页 围栏布置不合理的管理问题 2021 RoboCom 世界机器人开发者大赛

2021 RoboCom 世界机器人开发者大赛

2024-07-16 22:56| 来源: 网络整理| 查看: 265

7-1 绿地围栏 (20 分)

wl.png

市政规划了一块绿地,需要采购一批围栏将绿地围起来。

为了简单起见,我们假设绿地的形状是个封闭连通的规则多边形,即所有边都是互相垂直或平行的,并且没有交叉的十字边。我们指定某条垂直边上的一个点为原点 (0,0),然后按照顺时针记录这个多边形的拐角顶点的位置。显然两个相邻的点坐标中,总有一个是不变的,因为当我们从一个点沿着平行于 x 轴的边移动到下一个点时,这两个点的 y 坐标是不变的;当我们从一个点沿着平行于 y轴的边移动到下一个点时,这两个点的 x 坐标是不变的,所以我们可以用一种简化的方式去记录这些拐角,即对于从原点开始顺时针出现的拐角点 P1、P2、P3、…… 我们只需要记录 y1、x2、y3、…… 即可,其中 P**i 的坐标是 (xi,yi)。

采购的围栏每一条有固定长度 L,但是可以从任何地方弯折 90 度角,并且超长的部分也可以截掉。我们需要在两条围栏的衔接处打桩固定连接。现按顺时针方向给出绿地多边形各个拐角的简化坐标列表,请你计算需要采购多少条围栏,以及应该在哪里打桩。

输入格式:

输入第一行给出 2 个正整数,分别是:N(≤103),为绿地拐角点的个数(原点不算在内);以及 L(≤100),是一条围栏的长度。

随后给出 N 个整数,即从原点开始,按顺时针方向给出多边形各个拐角的简化坐标列表。每个坐标的绝对值均不超过 104。数字间以空格分隔。题目保证没有重叠或交叉的边。

输出格式:

每行按格式 x y 输出一对坐标,即从原点出发顺时针给出的打桩点的坐标 (x,y)。注意原点肯定要打一个桩。规定从原点出发顺时针布置围栏,优先使用整条围栏,最后回到原点时,有多余的围栏才会被截掉。

输入样例: 14 5 2 1 1 4 3 5 2 6 -1 4 0 2 -1 0 输出样例: 0 0 2 1 5 3 6 -1 2 0 样例说明:

样例对应的多边形如下图所示(其中红色方块为原点):

sample.png

容易算出围栏的总长度为 24,而每条围栏的长度为 5,所以需要 5 条围栏,多余的 1 个单位长度的围栏可以拆掉。从红色的原点出发,每隔 5 个单位打一根桩,图中蓝色方块即为打桩的位置。

题意:

有一个多边形,每条边都是水平或者垂直的。现在需要从(0, 0)点出发,每隔长度l打一个木桩,按顺时针顺序输出木桩的坐标

标签:

模拟

分析:

存下各个拐点的坐标,尤其注意这是一个闭合回路,需要注意把(0, 0)点加入路径,也就是说最后一个拐点的下一个点是零点(最后一个测试点,在最后一条边有木桩,3分),然后每次走一个单位坐标,每次走了l长度,都输出当前坐标,并清空长度,走到零点结束即可。

代码: //7-1 绿地围栏 #include #include #include #include #include #include #define x first #define y second using namespace std; typedef pair PLL; int n, l; int x, y; vector ps; int main() { cin >> n >> l; for(int i = 0; i > u; if(i % 2 == 0) y = u; else x = u; ps.push_back({x, y}); } x = 0, y = 0; int u = 0, i = 0; int px = ps[0].x, py = ps[0].y; ps.push_back({0, 0}); cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3