题目
华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在11分制和21分制下,双方的比赛结果(截至记录末尾)。
比如现在有这么一份记录,(其中W表示华华获得一分,L表示华华对手获得一分):
WWWWWWWWWWWWWWWWWWWWWWLW
在11分制下,此时比赛的结果是华华第一局11比0获胜,第二局11比0获胜,正在进行第三局,当前比分1比1。而在21分制下,此时比赛结果是华华第一局21比0获胜,正在进行第二局,比分2比1。如果一局比赛刚开始,则此时比分为0比0。直到分差大于或者等于2,才一局结束。
你的程序就是要对于一系列比赛信息的输入(WL形式),输出正确的结果。
题解
模拟,但是有很多易错细节:
- 当一局结束正好数据也结束时,此时下一局开始了,比分为0:0,则‘0:0’也要输出!
- 在数据末尾‘E’后面可能还有很多字符,此时应直接退出;
11分制的意思是当一方达到11分及以上,并且一方比另一方大两分或两分以上时比赛结束,21分制亦如此。
时间复杂度O(length(s))
代码
var
s,c:ansistring;
w,l,i:longint;
begin
while true do
begin
readln(c);
s:=s+c;
if pos('E',s)<>0 then
begin
delete(s,pos('E',s),length(s)-pos('E',s));
break;
end;
end;
delete(s,length(s),1);
for i:=1 to length(s) do
begin
if s[i]='W' then inc(w) else inc(l);
if ((w>=11)or(l>=11))and(abs(w-l)>=2) then
begin
writeln(w,':',l);
w:=0;l:=0;
end;
end;
writeln(w,':',l);
w:=0;l:=0;
writeln;
for i:=1 to length(s) do
begin
if s[i]='W' then inc(w) else inc(l);
if ((w>=21)or(l>=21))and(abs(w-l)>=2) then
begin
writeln(w,':',l);
w:=0;l:=0;
end;
end;
writeln(w,':',l);
end.