【洛谷 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时输出比分。

[NOIP2003 普及组] 乒乓球

题目背景

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

题目描述

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

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

$\texttt{WWWWWWWWWWWWWWWWWWWWWWLW}$

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

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

输入格式

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

输出格式

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

样例 #1

样例输入 #1

WWWWWWWWWWWWWWWWWWWW
WWLWE

样例输出 #1

11:0
11:0
1:1

21:0
2:1

提示

每行至多 $25$ 个字母,最多有 $2500$ 行。

(注:事实上有一个测试点有 $2501$ 行数据。)

【题目来源】

NOIP 2003 普及组第一题

思路

读到W则w++,读到L则l++。对于x分制,若w或l大于等于x分,且w和l分差大于等于2,则输出比分。

AC代码

#include <iostream>
#include <vector>
#include <cctype>
#include <cmath>
#define AUTHOR "HEX9CF"
using namespace std;

char ch;
vector<char> str;

void print(int x)
{
   
    int f = 1;
    int w = 0;
    int l = 0; 
    for(int i = 0; str[i] != 'E'; i++)
    {
   
        ch = str[i];
        // cout << ch;
        if ('W' == ch)
        {
   
            w++;
        }
        else if ('L' == ch)
        {
   
            l++;
        }
        if ((w >= x || l >= x) && 2 <= abs(w - l))
        {
   
            cout << w << ':' << l << endl;
            w = 0;
            l = 0;
            f = 0;
        }
    }
    cout << w << ':' << l << endl;
    putchar('\n');
}

int main()
{
   
    while((ch = getchar()) != 'E'){
   
        if(isalpha(ch)){
   
            str.push_back(ch);
        }
    }
    str.push_back('E');
    print(11);
    print(21);
    return 0;
}
目录
相关文章
|
监控 数据安全/隐私保护 网络虚拟化
ensp命令练习及交换机 和个路由器的基本命令
ensp命令练习及交换机 和个路由器的基本命令
1530 27
clion中cpp文件显示This file does not belong to any project ,code insight features might not work【解决方案】
clion中cpp文件显示This file does not belong to any project ,code insight features might not work【解决方案】
clion中cpp文件显示This file does not belong to any project ,code insight features might not work【解决方案】
|
机器学习/深度学习 算法 Python
Python高级算法——支持向量机(Support Vector Machine,SVM)
Python高级算法——支持向量机(Support Vector Machine,SVM)
1625 2
|
10月前
|
存储 弹性计算 人工智能
阿里云MC我的世界联机等游戏云服务器配置价格表
阿里云游戏服务器的年付费用,核心取决于游戏的玩家规模、类型(如小型联机、中型社群服、大型商业服)及是否需要高算力支持(如3D渲染、AI NPC)。2026年阿里云针对游戏场景推出了轻量应用服务器、ECS云服务器两类主力机型,覆盖从10人内小范围联机到50人以上高并发场景,同时搭配秒杀、续费同价等优惠,降低游戏运营成本。以下结合最新信息,按游戏场景拆解配置、年付价格及优惠规则,帮玩家和运营者精准核算费用。
3120 1
阿里云MC我的世界联机等游戏云服务器配置价格表
|
7月前
|
SQL 算法 关系型数据库
吃透 MySQL Join 底层:3 种关联算法的执行原理、适用场景与极致优化方案
本文深入解析MySQL三大JOIN算法(NLJ、BNLJ、Hash Join)的底层原理与优化实践,厘清驱动表选择、索引依赖、执行计划等关键误区,结合实战案例与代码实现,助开发者从根本上解决80%的慢JOIN问题。
613 2
|
8月前
|
机器学习/深度学习 人工智能 算法
孪生素数分布的大规模计算实验:分段筛实现与经验统计分析
孪生素数猜想断言存在无穷多对形如 (p,p+2)(p,p+2) 的素数,但该猜想至今仍未解决。Hardy–Littlewood 的第一猜想给出了孪生素数计数函数的经典启发式渐近公式,而张益唐、Maynard 与 Polymath8 的工作则证明了存在无穷多对素数,其间隔有统一上界,但这一上界尚未降至 2 [1–3]。
739 13
|
8月前
|
SQL 关系型数据库 MySQL
MySQL 慢 SQL 排查这件事,NineData 社区VS DBeaver/ Navicat 技术分析
DBeaver Community 和 Navicat Premium Lite 都是实用的客户端工具,在单条 SQL 的查询和验证上,依然是 DBA 常用的入口。NineData 社区版的定位不同,它是免费、本地化部署的数据管理平台,将数据库DevOps、数据复制、数据库对比三大能力整合于一体。
|
8月前
Dataphin登录系统重磅升级:界面化SSO配置、多账号登录功能上线
Dataphin V6.0推出界面化SSO配置与多账号体系登录功能,支持CAS、OAuth2.0、SAML、飞书等多种协议,解决旧版配置复杂、不支持多源登录等痛点,提升企业单点登录体验与管理效率。
563 0