#Lutece0027. 棒球防守(baseball)
棒球防守(baseball)
Migrated from Lutece 27 棒球防守(baseball)
All parts of this problem, including description, images, samples, data and checker, might be broken. If you find bugs in this problem, please contact the admins.
Description
在棒球比赛中,当对方打击者将投手投来的球击打出去以后,投手的队友们所要做的就是尽量把这个球防守下来,尽可能让对方出局。通常,防守的方法有两种:
如果打出的球是高飞球,则防守方可以在球落地之前用手套把球接住,称之为接杀
,直接让打击者出局。
如果打出的球是滚地球,则防守方的内场防守员(定义见下面)可以跑到球的线路上将球接住,并且传给一垒的防守员,如果一垒手接住球时打击者还没有跑到一垒(在本题中,假设这个条件一定成立。也就是内场防守员接到球的话打者就出局了),则称之为封杀
,也可以让打击者出局。
在本题中,输入给出打出的球的类型(高飞还是滚地),以及球的落点和飞行时间(对于高飞球)或者球的方向和速度(对于滚地球),和所有的防守队员的初始站位和移动速度,判断能不能让打者出局。
假设防守队员接球、传球都没有失误。
防守队员需要而且必须在球到之前(或同时)跑到高飞球的落地点上才能使打出高飞球的打者出局。
初始位置离本垒距离以上(含)的防守员规定为外场防守员,否则为内场防守员。
内场防守员需要而且必须在球到之前(或同时)跑到滚地球的线路上才能接住滚地球(并使打者出局)。如果他跑到了外场把球接住,打者也出局。
如果所有的内场防守者都不能接住一个滚地球,尽管可能有外场防守者能接到(即使他可以在内场接到球),打者仍然是安全的,不会出局。
假设球场是轴和轴夹成的一块区域,并向右、上无限延伸。
坐标原点是本垒,假设所有的球都是从本垒正中打出的,而且朝球场的方向飞,且速度一直不变。
Input
输入包含多组数据。每组数据第一行是两个整数和(),分别表示防守队员的人数和打出来的球数。表示输入结束。
接下来有行,每行都有三个整数、、(),表示对应的防守队员的坐标和速度。
最后有行,每行首先是一个字符(F
和G
之一),如果是F
,则表示这是一个高飞球,之后会跟上三个浮点数、、(),分别表示球的落点的、坐标和飞行时间;如果是G
,表示这是一个滚地球,之后会跟上一个分数和一个整数(),分别表示球的飞行方向与轴夹角的正切值和球的速度。
Output
对每组数据,输出行,每行表示打出对应的球的打者是否出局。如果出局,输出OUT
,否则输出SAFE
。
Samples
4 4
10 0 2
0 10 2
25 0 5
0 25 5
F 30 30 6
F 30 30 7
G 1/1 3
G 1/1 2
0 0
SAFE
OUT
SAFE
OUT
Note
所有输入数据允许时间有的计算误差。即不能杀的球至少快了的时间落地(高飞)或者滚过(滚地),能杀的球则至少慢了的时间。直接用double
来计算和比较应该不会存在精度问题。
Resources
电子科技大学第六届ACM程序设计大赛 初赛