Skip to content

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)