最近,我在Timus online judge上遇到了这个问题。对于不愿点击链接的人。问题如下:
乌拉尔锦标赛的经验丰富的参赛者来到 叶卡捷琳堡提前习惯了恶劣的天气 条件,走遍城市,当然,参观“林波波” 水上乐园。没有多少人知道附近有404号工厂 水上乐园,这种植物被当地人称为“错误404”。该 植物确实不容易找到,而且仍然比较困难 了解那里发生的事情。幸运的是,人们可以观看植物 从附近的人行天桥。因为看似静止而且 植物的荒凉,人们可能认为它已经停止运作, 但事实并非如此。该工厂的主要工作区域是修复 航空发动机。不久前,该工厂收到了修理订单 破碎的燃气涡轮发动机。原来,有些刀片被撕裂了 关闭,导致发动机轴上的负载过大。专家在 该工厂已决定可以快速修复发动机 去掉一些完整的刀片,使其中心的质量 剩余的刀片将再次位于旋转轴上。保持 尽可能大的发动机功率,最小数量的叶片应该 被删除。必须留下至少一个叶片,否则必须留下发动机 根本不会工作。专家断言,当所有的刀片 他们的端点完好无损,形成了正常的n-gon。告诉他们哪个 刀片应该被移除。
> Input The first line contains the initial number of blades in the
> turbine n and the number of torn blades k (3 ≤ n ≤ 20000; 1 ≤ k ≤ n −
> 1). The integer n has at most two distinct prime divisors. The next
> line contains k integers, which are the numbers of the torn blades in
> ascending order. The blades are numbered from 1 to n clockwise.
Output
> In the first line output the minimum number of blades that should be
> removed. In the second line output the numbers of these blades in any
> order separated with a space. If several answers are possible, output
> any of them. If it is impossible to repair the engine by removing some
> of the blades, output “−1”.
>
我在设置此问题时遇到问题。我最初的想法是,由于需要恢复质心,因此需要将破碎的刀片包围在相同数量的未破碎刀片中。
因此,如果我们将损坏的刀片表示为0且将完整的刀片表示为1,则特定配置可表示为: 011
我不确定自己是否走在正确的轨道上并且在尝试理解这个问题时会有一些反馈意见。
谢谢
答案 0 :(得分:4)
刀片的尖端最初形成一个正常的n
- gon。将它们视为复数。在不失一般性的情况下,半径为1,轴在原点上,数字n
的刀片尖端为1。
刀片的尖端是n
- 统一的根,刀尖k
位于
z_k = e^(2\pi i * k/n)
当且仅当
时,移除刀片k1, ... , kr
后的质心位于旋转轴上
z_k1 + z_k2 + ... + z_kr = 0
现在让1 < d < n
成为n
的除数。刀片k1 + m*d, 0 <= m < n/d
形成常规n/d
- gon的顶点。因此,将它们全部移除会使旋转轴上的质心停止。
策略是尝试通过一组不相交的常规d_i
- gons来覆盖破碎刀片的索引列表,其中d_i
是n
的除数。因此,在列表中,查找索引相等于n
的除数的对。
答案 1 :(得分:3)
我最初的想法是,由于需要恢复质心,因此需要将破碎的刀片包围在相同数量的非破碎刀片中。
没有。螺旋桨必须是旋转对称的。如果一个叶片从3叶片螺旋桨上脱落,则无法重新定位。
关键点是:
专家断言,当所有刀片完好无损时,它们的端点形成了一个正常的n-gon。
整数n最多有两个不同的素数除数。
从适合这两个属性的简单开始,例如十边形。问问自己:多边形和对称性如何相关?那么10的除数如何与多边形和对称性相关?为了简化问题,您可以使用标量而不是二维点来表示这些多边形吗?提示:模块化算法可以解决问题。
刀片配置图片(未固定和固定)应该有所帮助。例如:
2 2 2 2 3 1 1 4 0 4 0 4 0 4 0 5 9 5 9 5 9 6 8 6 8 6 8 8 7 7 7 7 whole 10-gon 2 broken blades 3 broken blades 3 broken blades
2个破碎刀片和前3个破碎刀片有两种可能的解决方案,但每种刀片只有一种最佳。第二个3破解有一个解决方案。寻找多边形。
答案 2 :(得分:2)
这个问题在数学上确实非常复杂,但可以通过很好地理解平衡如何工作来简化。
如果缺少一个刀片“k1”,则总计将获得平衡 “N / p2(例如= 3)刀片等间距已被删除 (可视化梅赛德斯奔驰标志)。 如果两个刀片“k1”和“k2”是 缺失,平衡将通过完全为“k2”作为 在前一种情况下,如果k1和k2在“p1”之后间隔,则除外 “p2”对称
12和20刀片的示例使得难以理解,因为它们是4的倍数,这意味着2阶的两个对称性。 我更喜欢21个刀片的例子,没有这个问题。
因此,要解决您的问题,您的算法应该执行以下操作: - 如果n是素数,只需输出“-1” - 无解 - 从第一个缺失的刀片开始,扫描间隔为“n / p1(= 7)”和“n / p2(= 3)”的缺失刀片组。计算每个对称组的组数,以及需要更换的刀片数。