Noip2003p1 乒乓球

题目:

 乒乓球

来源:

 Noip2003p1

题目大意:

 若干行字符串,’E’代表结束,’W’代表自己赢,’L’代表对手赢,分别输出11分制和21  分制的此时的比分情况,若大的一方大于11(21)且领先小的一方2及以上则该局结  束,两种比分中间有一个空行

数据范围:

 一行最多20个字符,总字符长度<=1000000

样例:

 WWWWWWWWWWWWWWWWWWWW

 WWLWE

11:0
11:0
1:1
 
21:0
2:1

做题思路:

 读字符然后模拟,读到E结束,如果读字符的话记得读个回车,不然就悲剧了。

知识点:

 模拟

var
 a1,a2,b1,b2:array[0..100000]of longint;
 i,j,k,t:longint;
 ch:char;
begin
 i:=1;j:=1;
 whilenot eof do
  begin
  read(ch);
  inc(t);
   ift=20 then
   begin
    readln;
    t:=0;
   end;
   ifch='E' then break;
   ifch='W' then inc(a1[i]) else inc(a2[i]);
   ifch='W' then inc(b1[j]) else inc(b2[j]);
   if((a1[i]>=11)and(a1[i]-a2[i]>=2))or((a2[i]>=11)and(a2[i]-a1[i]>=2))then inc(i);
   if((b1[j]>=21)and(b1[j]-b2[j]>=2))or((b2[j]>=21)and(b2[j]-b1[j]>=2))then inc(j);
  end;
 fork:=1 to i do writeln(a1[k],':',a2[k]);
 writeln;
 fork:=1 to j do writeln(b1[k],':',b2[k]);
end.



题目来源:http://yuanti.tyvj.cn:8080/Problem_Show.asp?id=1034



                
### NOIP 2003 乒乓球 Python 解法 #### 题目概述 NOIP 2003乒乓球问题主要涉及模拟比赛过程中的得分情况以及统计特定条件下的胜负关系。题目通常会给出一系列的比赛分数变化规则,要求程序能够按照这些规则计算最终的结果。 以下是基于该问题的一个通用解题思路和对应的 Python 实现: --- #### 解题思路 1. **输入解析**: 将输入数据拆分为每一轮的比赛记录,并提取每位选手的得分情况。 2. **状态维护**: 使用变量来跟踪当前比分、局数以及其他可能的状态标志位(如是否达到赛点等)。 3. **逻辑处理**: - 如果某一方连续获得一定数量的分差,则判定此轮结束并更新总比分。 - 当满足整场比赛终止条件时停止循环。 4. **输出结果**: 打印每一局的具体得分详情及最后的整体胜者信息。 上述方法可以通过简单的字符串遍历配合计数器完成整个流程控制[^2]。 --- #### Python 实现代码 下面提供了一个完整的 Python 版本解决方案: ```python def ping_pong_game(): s = input().strip() # 输入游戏序列 a, b = 0, 0 # 初始化双方得分为零 games_a, games_b = [], [] # 记录各局具体得分 i = 0 while i < len(s): game_s = "" # 单局得分记录初始化为空串 # 开始新的一局直到有人获胜为止 while True: if s[i] == 'A': a += 1 elif s[i] == 'B': b += 1 game_s += f"{a}:{b} " # 更新单局得分显示 # 判断是否有玩家赢得这一局 if ((max(a,b) >= 11 and abs(a-b)>=2)): break; i+=1 if(i>=len(s)): break; # 添加到对应的游戏列表里去 if a>b : games_a.append(game_s.strip()) a , b=0,0 # 清空准备下一盘 else: games_b.append(game_s.strip()) a , b=0,0 # 同样清空等待下一次对决开始 print(f"A won {len(games_a)} games.") for g in games_a: print(g) print(f"B won {len(games_b)} games.") for g in games_b: print(g) ping_pong_game() ``` 以上脚本定义了一种方式读取用户提供的字符流作为回合进展指示,并逐步累积两个竞争者的成绩直至决出胜负[^3]。 --- #### 注意事项 - 上述算法假设输入格式严格遵循描述形式;实际应用中需加入更多异常检测机制以增强鲁棒性。 - 对于边界测试用例特别留意平局情形或者极端长度的数据集表现如何调整参数适应不同需求场景。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值