酷代码 AI
菜单
全部AI  /  热门  /  AI问答
服务商

P3631[NOIP2003 普及组] 乒乓球 普及- 字符串 NOIp 普及组 模拟 2003 标准IO 传统题 时间限制 1000ms 内存限制 256MB 通过/尝试次数 411/1121 来源 洛谷 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中 11 11 分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白 11 11 分制和 21 21 分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。 题目描述 华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在 11 11 分制和 21 21 分制下,双方的比赛结果(截至记录末尾)。 比如现在有这么一份记录,(其中 W W 表示华华获得一分, L L 表示华华对手获得一分): WWWWWWWWWWWWWWWWWWWWWWLW WWWWWWWWWWWWWWWWWWWWWWLW 在 11 11 分制下,此时

这道题目要求我们根据乒乓球比赛的得分记录,分别计算11分制和21分制下的比赛结果。我们需要处理输入的字符串,忽略'E'之后的内容,然后分别模拟两种赛制下的比赛过程。 方法思路 1. 输入处理:读取所有输入行,直到遇到字符'E'为止,将所有有效的'W'和'L'字符拼接成一个字符串。 2. 模拟比赛过程:分别处理11分制和21分制: - 11分制:每局比赛先达到11分且领先至少2分的选手赢得该局。如果比分达到10:10,则需要继续比赛直到一方领先2分。 - 21分制:规则类似,但每局需要达到21分且领先至少2分。 3. 输出结果:每局比赛结束后,立即记录比分,并开始下一局。所有比分按顺序输出,11分制和21分制的结果之间用空行分隔。 解决代码 ```python def process_game(scores, rule): a = 0 b = 0 results = [] for c in scores: if c == 'W': a += 1 elif c == 'L': b += 1 # Check if the game ends according to the rule if (a >= rule or b >= rule) and abs(a - b) >= 2: results.append(f"{a}:{b}") a, b = 0, 0 # After loop, handle remaining scores that didn't complete a game if a != 0 or b != 0: results.append(f"{a}:{b}") return results def main(): import sys data = [] for line in sys.stdin: if 'E' in line: data.append(line[:line.index('E')]) break data.append(line.strip()) scores = ''.join(data) # Process 11-point rule results_11 = process_game(scores, 11) # Process 21-point rule results_21 = process_game(scores, 21) # Output results for res in results_11: print(res) print() for res in results_21: print(res) if __name__ == "__main__": main() ``` 代码解释 1. process_game函数:处理比赛得分字符串,根据给定的赛制规则(11分或21分)模拟比赛过程。每次得分后检查是否满足结束条件(达到规定分数且领先至少2分),满足则记录比分并重置当前比分。 2. main函数:读取输入数据,拼接有效字符(忽略'E'之后的字符),分别调用process_game处理11分制和21分制,输出结果。两部分结果之间用空行分隔。 3. 输入处理:使用sys.stdin读取所有行,遇到'E'时停止,并截取有效部分。 4. 输出处理:遍历两种赛制的结果列表,逐行输出比分。 这种方法确保正确解析输入数据,并根据不同赛制规则准确模拟比赛过程,输出符合要求的比分结果。 [2025-04-28 18:19:45 | AI问答 | 675点数解答]

相关提问