洛谷P1042 [NOIP2003 普及组] 乒乓球
前言
本题解原为在FZQOJ上老师的任务,还是我第一次在QOJ上写题解
题面
点击查看题面
题目背景
国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中 分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白 分制和 分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。
题目描述
华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在 分制和 分制下,双方的比赛结果(截至记录末尾)。
比如现在有这么一份记录,(其中 表示华华获得一分, 表示华华对手获得一分):
在 分制下,此时比赛的结果是华华第一局 比 获胜,第二局 比 获胜,正在进行第三局,当前比分 比 。而在 分制下,此时比赛结果是华华第一局 比 获胜,正在进行第二局,比分 比 。如果一局比赛刚开始,则此时比分为 比 。直到分差大于或者等于 ,才一局结束。
你的程序就是要对于一系列比赛信息的输入( 形式),输出正确的结果。
输入格式
每个输入文件包含若干行字符串,字符串有大写的 、 和 组成。其中 表示比赛信息结束,程序应该忽略 之后的所有内容。
输出格式
输出由两部分组成,每部分有若干行,每一行对应一局比赛的比分(按比赛信息输入顺序)。其中第一部分是 分制下的结果,第二部分是 分制下的结果,两部分之间由一个空行分隔。
样例 #1
样例输入 #1
1 | WWWWWWWWWWWWWWWWWWWW |
样例输出 #1
1 | 11:0 |
提示
每行至多 个字母,最多有 行。
(注:事实上有一个测试点有 行数据。)
【题目来源】
NOIP 2003 普及组第一题
解析
关于十一分制和二十一分制
在原题中,对于这种分制,描述是这样的:
在 分制下,此时比赛的结果是华华第一句 获胜,第二局 获胜,正在进行第三局,当前比分 。而在 分制下,此时比赛结果是华华第一局 获胜,正在进行第二局,比分。如果一局比赛刚开始,则此时比分为 。直到分差大于或者等于 ,才一局结束。
很显然地,我们可以看出一个条件:如果分差 ,比赛就结束了。(应该是为了考虑拉开差距)
但是这个样例看起来人畜无害非常简单,其实就是阻碍理解的一种ex数据:因为这里的悬殊太大,甚至华华对手基本上没有拿到分!
在第一次遇到的时候我的理解则是总分大于 或 就结束 而且没有考虑分差的情况 且分数差距大于2时比赛结束 (因为 ?) ,然后写的程序虽然能过样例,但是喜提爆零 WA声一片
遂尝试求助网络,有幸搜到了一个较清楚的百科:
11分制,乒乓球运动比赛规则之一。国际乒联2001年9月1日修订。一场比赛由奇数局组成,在一局比赛中,先得11分的一方为胜方。10平后,先夺得2分的一方为胜方。发、接球次序在获得每2分之后,接发球方即成为发球方。10平后,每方只轮发一球。在决胜局中,一方先得5分时,双方应交换位置。
从这个规矩就可以很明显看出来:只需要满足(a>=11||b>=11)&&abs(a-b)>=2
这个条件即可。
简单的模拟思路
这道题当然是一个较为简单但是坑爹的模拟题,按照题意计分即可。
我们使用双层while
循环,第一层循环每一局,第二层则是每一局的计分。第二层计分循环除了以上的退出条件之外,还需要考虑最后一个局可能出现不完整的现象,这种情况下只需要检测到全部计分完成之后退出即可(用一个变量记字数)。
输入分好几行,其实可以视为一行,我使用的是getchar
来读入直到检测到E
字符。
代码
话不多说上代码:
我已经认真读完并理解了上面的解析,并且不会直接照搬
1 |
|