首页 > 试题广场 >

乒乓球

[编程题]乒乓球
  • 热度指数:3441 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}旺仔哥哥特别喜欢打乒乓球,有一天他给你一串由字符 \texttt{W}\texttt{L} 组成的比赛记录,\texttt{W} 表示旺仔哥哥得分,\texttt{L} 表示对手得分。

\hspace{15pt}请分别按11 分制21 分制统计比赛结果,并输出每局比分。规则如下:
\hspace{23pt}\bullet\, 当且仅当一局比赛中存在某个选手分数不小于 11(或 21)且双方比分差 \geqq 2 时,判定一局结束,此时得分高的选手获胜;
\hspace{23pt}\bullet\, 若读取结束时当前局未结束,也需输出当前比分;
\hspace{23pt}\bullet\, 新局开始时比分记为 0{:}0

输入描述:
\hspace{15pt}一行一个字符串 s\left( 1 \leqq |s| \leqq 10^5,s_i \in \{\text{W},\text{L}\}\right),表示比赛记录。


输出描述:
\hspace{15pt}输出两部分,每部分若干行,每行为一局的比分,形如 \text{旺仔哥哥的得分}:\text{对手得分},按照记录顺序:
\hspace{23pt}\bullet\, 第一部分为 11 分制结果;
\hspace{23pt}\bullet\, 空行分隔后,第二部分为 21 分制结果。
示例1

输入

WWWWWWWWWWWWWWWWWWWWWWLW

输出

11:0
11:0
1:1

21:0
2:1
import math

def main():
    s = input()

    w_1,w_2 = 0,0
    l_1,l_2 = 0,0
    ans_1 = []
    ans_2 = []
    for c in s:
        if 'W' == c:
            w_1+=1
            w_2+=1
        elif 'L' == c:
            l_1+=1
            l_2+=1
        if (w_1 >= 11&nbs***bsp;l_1 >= 11) and abs(w_1 - l_1) >= 2:
            ans_1.append((w_1,l_1))
            w_1 = l_1 = 0
        if (w_2 >= 21&nbs***bsp;l_2 >= 21) and abs(w_2 - l_2) >= 2:
            ans_2.append((w_2,l_2))
            w_2 = l_2 = 0
    if w_1 + l_1 >= 0:  
        ans_1.append((w_1, l_1))
    if w_2 + l_2 >= 0:  
        ans_2.append((w_2, l_2))
    for i in range(len(ans_1)):
        print(f'{ans_1[i][0]}:{ans_1[i][1]}')
    print()
    for i in range(len(ans_2)):
        print(f'{ans_2[i][0]}:{ans_2[i][1]}')
        

if __name__ == '__main__':
    main()

发表于 2025-11-19 16:04:06 回复(0)