#P2547. No Tipping

    ID: 1548 远端评测题 3000ms 64MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>模拟数据结构Waterloo local 2001.06.02

No Tipping

本题没有可用的提交语言。

描述

正如阿基米德所发现的,当把一个物体放在杠杆臂上时,它会围绕杠杆的支点产生一个扭转力。这种扭转力被称作扭矩,其大小等于物体的重量乘以它到支点的距离(虽然杠杆的角度也会对扭矩产生影响,但在本题中我们暂不考虑)。若物体位于支点左侧,扭矩方向为逆时针;若位于支点右侧,则为顺时针。要计算围绕某个支撑点的总扭矩,只需将杠杆上各个物体所产生的扭矩相加即可。

本题的挑战在于,在调整杠杆上物体的同时,要保证杠杆始终保持平衡。假设你有一块长2020米、重33千克的均匀直木板。木板的中心即为其质心,我们将此位置标记为00。因此,木板上的位置范围是从10-10(左端)到+10+10(右端)。木板在位置1.5-1.5+1.5+1.5处由两个高度均为22米且立于平坦地面的相同支点支撑。木板上有六个包裹,它们的位置分别为8-84-43-3225588,对应的重量分别是44千克、1010千克、1010千克、44千克、77千克和88千克,如下图所示。

你的任务是逐个移除包裹,并且要确保在移除过程中木板始终依靠两个支点保持平衡,不会发生倾斜。若围绕左支点的净扭矩(由包裹和木板自身重量产生)为逆时针方向,或者围绕右支点的净扭矩为顺时针方向,木板就会倾斜。此问题的一个可行解决方案是:先移除位置为4-4的包裹,接着移除位置为88的包裹,再移除位置为8-8的包裹,然后移除位置为55的包裹,之后移除位置为3-3的包裹,最后移除位置为22的包裹。

你需要编写一个程序来解决上述类似的问题。

输入

输入包含多组测试用例。每组用例的开头是三个整数:木板的长度(单位:米,至少为33)、木板的重量(单位:千克)以及木板上包裹的数量nnn20n \leq 20)。木板在位置1.5-1.5+1.5+1.5处由两个高度均为22米且立于平坦地面的相同支点支撑。接下来的nn行,每行包含两个整数,分别表示包裹在木板上的位置(单位:米,以中心为原点,负数表示在左侧)和包裹的重量(单位:千克)。当输入一行三个00时,表示输入结束。

输出

对于每组用例,你需要按照如下格式输出用例编号,然后输出nn行,每行包含两个整数,分别是包裹的位置和重量,且这些包裹的移除顺序需保证木板不会倾斜。若某组用例不存在可行的解决方案,则输出一行 “Impossible”。若初始状态下木板就无法保持平衡,则该用例无解。

输入数据 1

20 3 6
-8 4
-4 10
-3 10
2 4
5 7
8 8
20 3 15
1 10 
8 5
-6 8
5 9
-8 4
8 10
-3 10
-4 5
2 9
-2 2
3 3
-3 2
5 1
-6 1
2 5
30 10 2
-8 100
9 91
0 0 0 

输出数据 1

Case 1:
-4 10
8 8
-8 4
5 7
-3 10
2 4
Case 2:
1 10 
8 5
-6 8
5 9
-8 4
8 10
-3 10
-4 5
2 9
-2 2
3 3
-3 2
5 1
-6 1
2 5
Case 3:
Impossible

来源

滑铁卢地区赛 2001.06.02