大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
输入格式:
输入第 1 行给出正整数 N(≤10​5​​),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 2 个代表乙方,中间有 1 个空格。
输出格式:
输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字间以 1 个空格分隔。第 3 行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有 1 个空格。如果解不唯一,则输出按字母序最小的解。
输入样例:
10
C J
J B
C B
B B
B C
C C
C B
J B
B C
J J
输出样例:
5 3 2
2 3 5
B B

这个题看起来很简单,仔细看的话还是有一点麻烦,麻烦在于后面输出的获胜次数最多的俩个字母,所以写代码有点繁琐,还有注意当有多种答案时,按字母顺序最小的输出,细节解释写在代码里面,感觉网上很多人写的代码都很混乱,这个题目存在一个问题就是时间超出了,最后一项通不过,应该有更简洁的代码,本人水平有限,不过用C和C++等不会出现这种问题,因为他们运行速度比较快,这可能也是python相对于其它一些语言的弱势吧。

N = int(input())
num1 = 0    # 定义三个变量,记录甲胜,平,输次数
num2 = 0
num3 = 0
C1, J1, B1 = 0, 0, 0    # 记录甲获胜字母的次数
C2, J2, B2 = 0, 0, 0    # 记录乙获胜字母的次数
for i in range(0, N):
    one, two = map(str, input().split(' '))
    # 这里将胜、平、输三种情况直接列出来,比较好理解
    if one == 'C' and two == 'J' or one == 'J' and \
            two == 'B' or one == 'B' and two == 'C':
        num1 += 1
    elif one == two:
        num2 += 1
    else:
        num3 += 1
    # 下面是具体获胜的是锤头,布还是剪刀
    if one == 'C' and two == 'J':
        C1 += 1
    elif one == 'J' and two == 'B':
        J1 += 1
    elif one == 'B' and two == 'C':
        B1 += 1
    elif two == 'C' and one == 'J':
        C2 += 1
    elif two == 'J' and one == 'B':
        J2 += 1
    elif two == 'B' and one == 'C':
        B2 += 1
print('{0} {1} {2}'.format(num1, num2, num3))
print('{2} {1} {0}'.format(num1, num2, num3))
if B1 >= C1 and B1 >= J1:
    print('B', end=' ')
elif C1 >= J1 and C1 >= B1:
    print('C', end=' ')
else:
    print('J', end=' ')
if B2 >= C2 and B2 >= J2:
    print('B')
elif C2 >= J2 and C2 >= B2:
    print('C')
else:
    print('J')