由于在刷题库里面没找到原题,不知道我这种方法超时时长没有
def check(n, x):
#初始化
score = [0, 0, 0]
lose = [0, 0, 0]
#先假定没有人胜出,lock为假
lock = False
#如果存在其中有两项相同,用于存储这两项和另一个数字不一样的位置
#相同的两项放在列表中的索引0,1
count = []
for i in range(n):
#如果三人的数字一样或者三个人都各不相同就跳过
if x[i][0] == x[i][1] == x[i][2] or (x[i][0] != x[i][1] and x[i][2] != x[i][1] and x[i][0] != x[i][2]):
continue
else:
for j in range(3):
#用于判断前者减去后者是否等于-1或2,如果是则前者胜后者输
if x[i][j] - x[i][(j + 1) % 3] == -1 or x[i][j] - x[i][(j + 1) % 3] == 2:
score[j] += 1
lose[(j + 1) % 3] += 1
#解除锁定,有人胜出
lock = True
#上同,若前者减去后者等于1或-2,则前者输后者胜
elif x[i][j] - x[i][(j + 1) % 3] == 1 or x[i][j] - x[i][(j + 1)%3]== -2:
lose[j] += 1
score[(j + 1) % 3] += 1
#解除锁定,有人胜出
lock = True
#判断是否有相同项
elif x[i][j] - x[i][(j + 1) % 3] == 0:
#前两条语句是将相同两项的位置记录下来,便于后续在相应位置做出lose或score的加分
count.append(j)
count.append((j + 1) % 3)
#不同的那一项的位置
count.append((j + 2) % 3)
elif count:
#判断,有了相同项并且有人胜出则对相应lose或score做出相应的加分
#实际上这个判断可以不要,有两个数重复那么肯定就会有输赢,因为平局(三个数相等)
#的情况已经舍去
if lock == True:
lose[count[0]] += 1
lose[count[1]] += 1
score[count[2]] += 2
#记录净赚的钱
final=[]
for m,n in zip(score, lose):
final.append(m-n)
return final
n = int(input())
x = []
for i in range(n):
x.append(list(map(int, input().split())))
result = check(n, x)
for i in result:
print(i)