【洛谷】【模拟】【字符串】P1042 [NOIP2003 普及组] 乒乓球

简介: 【洛谷】【模拟】【字符串】P1042 [NOIP2003 普及组] 乒乓球

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

题目描述
  华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在 1111 分制和 2121 分制下,双方的比赛结果(截至记录末尾)。

  比如现在有这么一份记录,(其中 W 表示华华获得一分,L 表示华华对手获得一分):

WWWWWWWWWWWWWWWWWWWWWWLWWWWWWWWWWWWWWWWWWWWWWWLW

  在 11分制下,此时比赛的结果是华华第一局 11 比 0 获胜,第二局 11比 00获胜,正在进行第三局,当前比分 1 比 1。而在 21 分制下,此时比赛结果是华华第一局 21 比 0 获胜,正在进行第二局,比分 2 比 1。如果一局比赛刚开始,则此时比分为 0 比 0。直到分差大于或者等于 2,才一局结束。

  你的程序就是要对于一系列比赛信息的输入(WL 形式),输出正确的结果。

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

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

测试样例

Input
WWWWWWWWWWWWWWWWWWWW
WWLWE

Output
11:0
11:0
1:1

21:0
2:1

题目解答
1.注意是多少分制,避免混淆

2.千万记得E结束,E之后的就不要了,有可能不用读完所有字符

3.注意是挨个字符识别,整个字符串的话程序运行会爆
AC代码

#include<iostream>
#include<vector>
#include<math.h>
#include<bits/stdc++.h>
using namespace std;

int main()
{
    vector<pair<int,int> > vec_1,vec_2;//相当于二维数组
    char ch;
    //针对11分制双方得分
    int a_1 = 0,b_1 = 0;
    //针对21分制双方得分
    int a_2 = 0,b_2 = 0;
    while(cin>>ch)
    {
        //输入为E则停止输入
        if(ch=='E') break;
        else if(ch=='W')
        {
            a_1++;
            a_2++;
        }
        else if(ch=='L')
        {
            b_1++;
            b_2++;
        }
        //11分制计算
        if(a_1>=11 || b_1>=11)
        {
            if(abs(a_1 - b_1) > 1)
            {
                vec_1.push_back(pair<int,int>(a_1,b_1));
                a_1 = 0;
                b_1 = 0;
            }
        }
        //22分制计算
        if(a_2>=21 || b_2>=21)
        {
            if(abs(a_2 - b_2) > 1)
            {
                vec_2.push_back(pair<int,int>(a_2,b_2));
                a_2 = 0;
                b_2 = 0;
            }
        }
    }
    //加入最后的结果,避免遗漏
    vec_1.push_back(pair<int,int>(a_1,b_1));
    vec_2.push_back(pair<int,int>(a_2,b_2));

    int l_1 = vec_1.size();
    int l_2 = vec_2.size();

    for(int i=0;i<l_1;i++)
    {
        cout<<vec_1[i].first<<":"<<vec_1[i].second<<endl;
    }
    for(int i=0;i<l_2;i++)
    {
        cout<<endl<<vec_2[i].first<<":"<<vec_2[i].second;
    }
    return 0;
}
相关文章
|
机器学习/深度学习 人工智能 网络架构
P1563 [NOIP2016 提高组] 玩具谜题(找规律,心要细,数学思维)
P1563 [NOIP2016 提高组] 玩具谜题(找规律,心要细,数学思维)
73 0
|
6月前
|
C++
【洛谷 P1042】[NOIP2003 普及组] 乒乓球 题解(模拟+向量)
`NOIP2003`普及组编程题:乒乓球比赛模拟。给定一系列球赛记录(WL序列),程序需按11分和21分制分析比分。输入含多个字符串,含W(华华得分)、L(对手得分)和E(结束标记)。输出每局比分,分制间空行间隔。样例:`WWWWWW...` → `11:0\n11:0\n1:1`(11分制)和`21:0\n2:1`(21分制)。代码使用C++,逐字符读取,当分差≥2且得分≥x时输出比分。
63 0
|
6月前
|
C++
【洛谷 P2670】[NOIP2015 普及组] 扫雷游戏 题解(模拟)
**扫雷游戏NOIP2015普及组题目:**在$n\times m$的雷区,玩家需避开地雷格(*),翻开非地雷格(?)显示周围地雷数。给定雷区布局,输出每个格子的地雷数或保持*不变。输入含雷区大小及布局,输出相应格式。样例输入/输出展示具体规则。100%数据$n,m\leq100$。程序思路:检查邻接8格,AC代码用C++实现。
42 0
|
6月前
【洛谷 P1563】[NOIP2016 提高组] 玩具谜题(模拟+结构体数组+指针)
**摘要:** NOIP2016提高组的玩具谜题是一个编程挑战,涉及理解玩具小人在圆圈中的相对位置。题目要求解决一系列基于小人朝向(内或外)的左右数指令,来找到最终目标小人。输入包含小人数量、指令数、每个小人的朝向和职业,以及指令详情。输出是最后到达的小人的职业。给定的AC代码使用指针模拟环状数组,通过按位异或判断朝向来移动指针。样例展示了问题的解决过程。子任务有不同的数据规模和限制条件。
57 0
|
6月前
【洛谷 P2669】[NOIP2015 普及组] 金币 题解(循环)
`NOIP2015`普及组题目,骑士按周期领金币:第一天1枚,随后$n$天每天$n$枚,然后$n+1$天每天$n+1$枚。给定天数$k$,求总金币数。输入$k$,输出金币总数。样例输入6,输出14;输入1000,输出29820。代码使用循环和变量控制周期,累计金币数。
120 0
|
6月前
|
C++
【洛谷 P1047】[NOIP2005 普及组] 校门外的树 题解(位集合)
**NOIP2005普及组问题:**给定长度为$l$的马路,上面等距种植着树,需移除位于建造地铁区域的树。输入包含马路长度和区域数,以及各区域起止点,输出移树后剩余树的数量。样例输入:$l=500$, $m=3$,输出:$298$。$20\%$数据无区域重合,$1 \leq l \leq 10^4$,$1 \leq m \leq 100$。解决方案利用位集合(bitset)表示树的状态,遍历区域将树设为0,最后统计1的数量。AC代码使用C++实现。
31 0
|
6月前
【洛谷 P1046】[NOIP2005 普及组] 陶陶摘苹果 题解(比较)
`NOIP2005普及组`编程题《陶陶摘苹果》:陶陶有10个高度在100-200cm的苹果要摘,手触及最大高度+30cm板凳后能摘到的苹果数。输入10个苹果高度和她的最大触及高度,输出可摘苹果数。样例输入:10个苹果高度和110cm触及高度,输出5,表示能摘5个。代码通过逐个比较苹果高度实现统计。
74 0
P1093 [NOIP2007 普及组] 奖学金(模拟排序)
P1093 [NOIP2007 普及组] 奖学金(模拟排序)
57 0
【2012NOIP普及组】T1. 质因数分解 试题解析
【2012NOIP普及组】T1. 质因数分解 试题解析
|
程序员
贤鱼的刷题日常--P1022 [NOIP2000 普及组] 计算器的改良--题目详解
🍀学习了解P1022 [NOIP2000 普及组] 计算器的改良
313 0
贤鱼的刷题日常--P1022 [NOIP2000 普及组] 计算器的改良--题目详解