[洛谷1042]乒乓球

来源:互联网 发布:知柏地黄丸一次吃多少 编辑:程序博客网 时间:2024/05/05 20:25

题目来源

www.luogu.org
原地址
http://www.luogu.org/problem/show?pid=1042#

题目背景

  国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白11分制和21分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。

题目描述

  华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在11分制和21分制下,双方的比赛结果(截至记录末尾)。
  比如现在有这么一份记录,(其中W表示华华获得一分,L表示华华对手获得一分):
WWWWWWWWWWWWWWWWWWWWWWLW
  在11分制下,此时比赛的结果是华华第一局11比0获胜,第二局11比0获胜,正在进行第三局,当前比分1比1。而在21分制下,此时比赛结果是华华第一局21比0获胜,正在进行第二局,比分2比1。如果一局比赛刚开始,则此时比分为0比0。
你的程序就是要对于一系列比赛信息的输入(WL形式),输出正确的结果。

输入输出格式

输入格式:

  每个输入文件包含若干行字符串(每行至多20个字母),字符串有大写的W、L和E组成。其中E表示比赛信息结束,程序应该忽略E之后的所有内容。

输出格式:

  输出由两部分组成,每部分有若干行,每一行对应一局比赛的比分(按比赛信息输入顺序)。其中第一部分是11分制下的结果,第二部分是21分制下的结果,两部分之间由一个空行分隔。

输入输出样例

输入样例#1:
WWWWWWWWWWWWWWWWWWWWWWLWE
输出样例#1:
11:0 11:0 1:1 21:0 2:1
题解

此题只需用四个累加器,不断累加,其中两个到11就记录清0;另外两个到21就记录清0。
但是有几个陷阱需要注意:
1.因为是乒乓球,所以当10:10(20:20)时应加一球(即一方分数到12分(22分)时才算获胜)。
2.遇到'E'时应停止读入,数据中就有这种坑。
3.如果开头就是一个'E',也到单独判断一下。

代码
var
 f:boolean;
 a,b,a1,b1,h,i,j,t:longint;
 s:string;
  c,d:array[1..10000] oflongint;
begin
 f:=true;a:=0;b:=0;a1:=0;b1:=0;h:=0;t:=1;
  while fdo
  begin
   readln(s);if (s[1]='E')and(t=1) then beginwriteln('0:0');writeln;writeln('0:0');exit;end;
   t:=0;
    for i:=1to length(s) do
   begin
     if s[i]='E' then beginf:=false;break;end
     else if s[i]='W' then begin inc(a);inc(a1);endelse if s[i]='L' then begin inc(b);inc(b1);end;
     if (a<10)and(b=11)or(b<10)and(a=11) thenbegin writeln(a,':',b);a:=0;b:=0;end;
     if (a>9)and(b=a+2)or(b>9)and(a=b+2) thenbegin writeln(a,':',b);a:=0;b:=0;end;
     if (a1<20)and(b1=21)or(b1<20)and(a1=21)then begininc(h);c[h]:=a1;d[h]:=b1;a1:=0;b1:=0;end;
     if(a1>19)and(b1=a1+2)or(b1>19)and(a1=b1+2) then begininc(h);c[h]:=a1;d[h]:=b1;a1:=0;b1:=0;end;
   end;
    ifnot(f) then
     begin
      writeln(a,':',b);
      inc(h);c[h]:=a1;d[h]:=b1;
     end;
  end;
 writeln;
  for i:=1 to h dowriteln(c[i],':',d[i]);
end.





0 0
原创粉丝点击