在协会足球(也称为足球)中,点球大战是第二个打破常规的措施,可能会在加时赛(即协会足球加时赛)之后不能打成平局的比赛中使用。
在点球大战中,主裁判掷硬币确定射门发生在哪个目标,然后掷另一枚硬币确定哪个队先开始。但是,与此挑战相关的唯一事情就是随后发生的事情,如下所述。
每队在开始时有5罚则,罚分是0-0。如果在任何时候,一支球队的剩余罚款还不足以改变目前获胜的球队,那么枪战将停止。
如果没有剩余的罚分,但两支球队的得分相等,则两支球队将被另外判罚。重复该过程,直到点不相等为止。
枪战停止后,点球得分最高的球队获胜。
挑战
您的挑战是给定两个列表,A
并B
代表球队A和球队B分别得分的点球,以确定他们是否代表有效的点球大战。如果可以达到输入所代表的状态,则无论是否确定获胜队伍,枪战都是有效的。请注意,您可能必须测试两种情况(团队A启动,团队B启动),因为如果至少在一种情况下输入中描述的状态可达到,则输入有效。如果列表的长度不同,则由较长的列表代表的团队首先开始(它只能比另一列表的元素多,而较短列表的团队则无法开始,因为较长列表的团队将受到两次处罚)连续,因为较短的列表会过早耗尽)。
详细的例子
您可以跳到下面的“规则”部分,它们仅用于帮助解决挑战。
假设您将这个枪战作为输入,这-
意味着没有进球,也没有进球X
(无效):
Team A: - X X X X
Team B: - - - - X
Assuming team A starts first:
Team A: - (0 - 0) (max possible score 4 - 5)
Team B: - (0 - 0) (max possible score 4 - 4)
Team A: X (1 - 0) (max possible score 4 - 4)
Team B: - (1 - 0) (max possible score 4 - 3)
Team A: X (2 - 0) (max possible score 4 - 3)
Team B: - (2 - 0) (max possible score 4 - 2)
Team A: X (3 - 0) (max possible score 4 - 2)
Team A already has a higher score than B could ever have, but the input hasn't
ended yet, so it's invalid if team A is first.
Assuming team B starts first:
Team B: - (0 - 0) (max possible score 5 - 4)
Team A: - (0 - 0) (max possible score 4 - 4)
Team B: - (0 - 0) (max possible score 4 - 3)
Team A: X (1 - 0) (max possible score 4 - 3)
Team B: - (1 - 0) (max possible score 4 - 2)
Team A: X (2 - 0) (max possible score 4 - 2)
Team B: - (2 - 0) (max possible score 4 - 1)
Team A already has a higher score than B could ever have, but the input hasn't
ended yet, so it's invalid if team B stars first.
The input is invalid no matter which team starts first, so it's considered
invalid.
相反,这是一个有效的示例:
Team A: X X X
Team B: - - -
Assuming team A starts first:
Team A: X (1 - 0) (max possible score 5 - 5)
Team B: - (1 - 0) (max possible score 5 - 4)
Team A: X (2 - 0) (max possible score 5 - 4)
Team B: - (2 - 0) (max possible score 5 - 3)
Team A: X (3 - 0) (max possible score 5 - 3)
Team B: - (3 - 0) (max possible score 5 - 2)
It can be determined that team A wins, however the input has ended, so it's
valid if team A starts first. Therefore, the input is valid.
另一个例子,这次有额外的罚款:
Team A: X - X - - - X -
Team B: - X X - - - X X
Assuming team A starts first:
Team A: X (1 - 0) (max possible score 5 - 5)
Team B: - (1 - 0) (max possible score 5 - 4)
Team A: - (1 - 0) (max possible score 4 - 4)
Team B: X (1 - 1) (max possible score 4 - 4)
Team A: X (2 - 1) (max possible score 4 - 4)
Team B: X (2 - 2) (max possible score 4 - 4)
Team A: - (2 - 2) (max possible score 3 - 4)
Team B: - (2 - 2) (max possible score 3 - 3)
Team A: - (2 - 2) (max possible score 2 - 3)
Team B: - (2 - 2) (max possible score 2 - 2)
First 5 penalties result in a tie, so we move on to extra penalties.
Team A: -, Team B: - (2 - 2)
Team A: X, Team B: X (3 - 3)
Team A: -, Team B: X (3 - 4)
It can be determined that team B wins, however the input has ended, so it's
valid if team A starts first. Therefore, the input is valid.
这是一个有效的输入,现在确定获胜者还为时过早:
Team A: X X - -
Team B: - X - X
Assuming team A starts first:
Team A: X (1 - 0) (max possible score 5 - 5)
Team B: - (1 - 0) (max possible score 5 - 4)
Team A: X (2 - 0) (max possible score 5 - 4)
Team B: X (2 - 1) (max possible score 5 - 4)
Team A: - (2 - 1) (max possible score 4 - 4)
Team B: - (2 - 1) (max possible score 4 - 3)
Team A: - (2 - 1) (max possible score 3 - 3)
Team B: X (2 - 2) (max possible score 3 - 3)
The input has ended before the winner can be determined, so it's valid if team A
starts first. Therefore, the input is valid.
最后,这是列表长度不同的输入:
Team A: - - -
Team B: X X - X
Since team B shot more penalties, it starts first:
Team B: X (0 - 1) (max possible score 5 - 5)
Team A: - (0 - 1) (max possible score 4 - 5)
Team B: X (0 - 2) (max possible score 4 - 5)
Team A: - (0 - 2) (max possible score 3 - 5)
Team B: - (0 - 2) (max possible score 3 - 4)
Team A: - (0 - 2) (max possible score 2 - 4)
Team B: X (0 - 3) (max possible score 2 - 4)
It can be determined that team B wins, however the input has ended, so it's
valid.
规则
- 首先开枪的球队可以是A或B,您不能假设一个人总是开枪。
- 列表的长度相同,或者长度相差一。
- 您可以选择任何两个不同且一致的值来表示得分/未得分罚分。
- 列表也可以表示为从双射基数 2,字符串或您语言的本机列表格式转换的整数。如果选择了双射基座2格式中,输入规则适用于数字转换为双射基座2(所以数字
1
和2
可以分别是指刻痕,并且未刻痕或无刻痕和刻痕)。不允许使用常规二进制,因为无法确定预期的二进制表示形式中是否存在前导零。 - 这是代码高尔夫球,因此最短的解决方案是成功的。但是,即使您的语言似乎无法“击败专业人士”,也请不要灰心。
测试用例
在这些测试用例中,a 0
表示无效,a 1
表示目标。
格式:
[Team A], [Team B]
有效输入:
[], []
[0], [0]
[0], [1]
[1], [1]
[0], []
[1, 1, 1, 1], [0, 0, 1, 1]
[0, 1, 1, 1, 1], [0, 1, 1, 0]
[0, 0, 0, 0, 1], [0, 0, 0, 1, 0]
[0, 0, 0, 0, 1], [0, 0, 0, 1]
[1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1]
[0, 1, 1, 1, 1], [0, 1, 1, 0, 1]
[1, 1, 1], [0, 0, 0]
[1, 1, 1, 1], [0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
输入无效:
[0, 1, 1, 1, 1], [0, 1, 1, 0, 0]
[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 1]
[1, 1, 1, 0], [0, 0, 0]
[1, 1, 1, 1], [0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
[1, 0, 1, 0, 1], [0, 1, 0, 1, 0, 1]
[0, 0, 0, 0, 1], [0, 1, 1, 1, 0]
[[0,0],[1,1]]
(或两个内部列表之一包含2个项目的任何测试用例)是真实的,因为游戏仍在继续(就像带有[[0],[1]]
或[[0],[]]
仍在进行中的测试用例一样)?