T16532: 北大杯台球比赛
matrices, http://cs101.openjudge.cn/practice/16532
北大杯台球比赛进入白热化的黑八大战环节,台球桌尺寸为16x5,以台球桌左上角建立坐标系如下图所示:
0——1——2——3——4——5——6——7——8——...——16—— x轴
| | | | | | | | | |
1——.——.——.——.——.——.——.——.——...——.
| | | | | | | | | |
2——.——.——.——.——.——.——.——.——...——.
| | | | | | | | | |
3——.——.——.——.——.——.——.——.——...——.
| | | | | | | | | |
4——.——.——.——.——.——.——.——.——...——.
| | | | | | | | | |
5——.——.——.——.——.——.——.——.——...——.
|
y轴y轴
其中(0,0)(8,0)(16,0)(0,5)(8,5)(16,5)是台球桌上的六个入袋口,台球只有运动到这六个网格顶点时才能进球。 现在已知台球桌上仅剩下一个白色母球和一个黑球,并且知道他们的 x,y 坐标(均为整数)。击球时只能击打白色母球,且击球方向只有左上(-1,-1)、左下(-1,1)、右上(1,-1)、右下(1,1)四种方向。 击球后白色母球会沿击球方向运动,若碰到球桌壁则会发生反弹,若碰到黑球则会发生完全弹性碰撞导致动能完全传递(即白球静止,黑球获得白球的速度继续运动)。球向以上4个方向移动一次就会消耗一单位能量。 请计算最后的胜负情况。
输入
输入为四行 第一行为白色母球的坐标 第二行为黑球的坐标 第三行为击球方向 第四行为击球力度,即施加给白球的初始动能是多少单位
输入保证两球的坐标落在球桌内,不会在球壁上,且不重复,保证击球方向为上述四方向之一,保证击球能量>=0
输出
输出为一行 假如白球入库输出-1,黑球入库则输出1,无球入库则输出0
样例输入
Sample1 Input:
1 1
2 2
-1 -1
10
Sample1 Output:
-1样例输出
Sample2 Input:
2 2
1 1
-1 -1
10
Sample2 Output:
1
Sample3 Input:
2 2
1 1
-1 -1
0
Sample3 Output:
0来源:cs10117 Final Exam
黑球碰撞之后和白球一样运动(也可以理解为换了个颜色继续向前走,速度不变),碰撞墙壁能量也不变,只是方向改变。
python
wx, wy = map(int, input().split())
bx, by = map(int, input().split())
dirx, diry = map(int, input().split())
energy = int(input())
bags = {(0,0), (8,0), (16,0), (0,5), (8,5), (16,5)}
cnt = 0
BallInBag = 0
for i in range(0,energy):
wx = wx + dirx
wy = wy + diry
#go in bag
if (wx,wy) in bags:
BallInBag = 1
'''
if cnt%2 == 0:
print(-1)
else:
print(1)
'''
print((-1)**(cnt+1))
break
#record how many times white and black ball hit
if wx == bx and wy == by:
cnt = cnt+1
#reflect
if (wx == 0 and dirx == -1) or (wx == 16 and dirx == 1): # 碰左右边界
dirx = -dirx
if (wy == 0 and diry == -1) or (wy == 5 and diry == 1): # 碰上下边界
diry = -diry
if BallInBag == 0:
print(0)