
AB二人玩游戏,每一局(plays)游戏会有一个获胜者,首先获胜X局(play)的玩家得一分(赢得一轮sets)。率先获得Y分的玩家获得最终胜利。
给你整场游戏的每局(plays)获胜情况,在不知道X和Y的情况下,判断游戏的获胜者。
(英语阅读做了多半个小时o(╥﹏╥)o)
首行测试样例数t,
每个样例首行,局数(plays)n,
第二行长度为n的字符串s,每个字符由A或B组成,代表每局的获胜者
每个样例的游戏获胜者,A或B

plays数最大为20,故可通过枚举的方式试错X和Y。另外一种解决方式是个脑筋急转弯,对于这样一个样例“ABBAA”,倒着看,最后一局胜者是A,且游戏结束。那么此局(play)过后,A在当前轮次(set)获胜,即获胜X个plays。同样因为此set过后游戏结束,故当前set获胜者一定积累了Y个set分。
-
- for t in range(int(input().strip())):
- n = int(input().strip())
- s = input().strip()
-
- print(s[-1])

给定数组a,找到一个只包含1,2和3元素的数组b,使其满足且只满足以下三个条件中的两个:
1、存在
,使得
,
,
2、存在
,使得
,
,
3、存在
,使得
,
,
首行测试样例数t,
每组样例首行,数组a的长度n,
第二行数组a,
满足条件的数组b,如误解输出-1

三个条件是等价的,满足任两个即可。假设满足(1,2)和(1,3),数组a只需保证有两个不同的数字出现次数在两次以上既能满足要求。假设有两个数字x和y满足这个要求,只需
->
,
-> 3。这样不会有(2,3)的冲突
- N = 110
-
- def solve():
- n = int(input().strip())
- a = list(map(int, input().strip().split()))
- b = [1] * n
- inds = [list() for i in range(N)]
-
- for i in range(n):
- inds[a[i]].append(i)
-
- k = 2
- for x in range(1, 101):
- if len(inds[x]) >= 2:
- b[inds[x][0]] = k
- k += 1
- if k > 3:
- break
-
- if k <= 3:
- print(-1)
- else:
- for i in b:
- print(i, end=" ")
- print()
-
- for t in range(int(input().strip())):
- solve()