您的位置:首页 > 其它

洛谷1042 乒乓球

2017-01-13 20:51 239 查看

题目

华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: