CF28A Bender Problem

题目描述

机器人 Bender 决定为 Fray 制作一个生日礼物。他钉了 $n$ 个钉子,并以某种顺序给它们编号为 $1$ 到 $n$。Bender 决定用金属杆做一幅画。画的形状是一个闭合的折线,这条折线的顶点应该是按给定顺序的钉子。折线的各个线段应与坐标轴平行。折线可以自交。 Bender 可以取一根金属杆,在任意位置对其折叠一次,形成 $90$ 度的角。然后,他可以把折叠处连接到某个未占用的钉子处,再将金属杆的两个端点分别接到相邻的钉子上。一个钉子被认为是未占用的,当且仅当没有金属杆的任一端或折叠处连接到该钉子。不可以重复使用同一根金属杆。不是所有的金属杆都必须被用上。 请帮助 Bender 完成这项困难的任务。

输入格式

第一行包含两个正整数 $n$ 和 $m$($4 \leq n \leq 500$,$2 \leq m \leq 500$,且 $n$ 是偶数),分别表示钉子的数量和金属杆的数量。 接下来的 $n$ 行中,第 $i$ 行包含一对整数,表示第 $i$ 个钉子的坐标。 最后一行包含 $m$ 个整数,表示各金属杆的长度。所有坐标的绝对值不超过 $10^4$,金属杆的长度在 $1$ 到 $200000$ 之间。每根金属杆只能使用一次。 保证所有折线的线段都与坐标轴平行,且没有三个位于同一直线上的连续钉子。

输出格式

如果无解,输出 NO。 否则,输出 YES,并在第二行输出 $n$ 个数字,第 $i$ 个数字表示以第 $i$ 个钉子作为折叠点所使用的金属杆的编号,如果没有使用则输出 $-1$。 如果有多组解,输出任意一组即可。

说明/提示

由 ChatGPT 5 翻译