洛谷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.
相关文章推荐
- 洛谷1042 乒乓球 解题报告
- [洛谷1042]乒乓球
- 乒乓球-洛谷 1042
- 洛谷——P1042 乒乓球
- [luoguP1042] 乒乓球(模拟)
- 洛谷 P1042 乒乓球
- 洛谷 P1042 乒乓球
- luoguP1042 【乒乓球】
- 洛谷 1023——乒乓球(交叉模拟)
- 【模拟】洛谷 P1042 乒乓球
- 洛谷1042
- 洛谷 1991 无线通讯网 kruskal
- 洛谷 [P1113] 杂务
- 洛谷 P1760 通天之汉诺塔
- 洛谷 [P1265] 公路修建
- 洛谷P2925 [USACO08DEC]干草出售Hay For Sale
- 洛谷 P2679 子串
- 洛谷 P2055 [ZJOI2009]假期的宿舍
- HDU 1042 N! (大数阶乘加优化处理)
- 洛谷1967 火车运输 kruskal求最大生成树 倍增LCA维护最小值