首页 > 其他分享 >P1042 [NOIP2003 普及组] 乒乓球

P1042 [NOIP2003 普及组] 乒乓球

时间:2023-08-09 22:45:26浏览次数:33  
标签:11 分制 NOIP2003 int max cf 乒乓球 P1042 score

题目描述

华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在 \(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}\) 形式),输出正确的结果。

分析

大致结构是 读入字符串->处理字符串->输出

重点在于如何处理字符串。判断得分是很容易的,问题是处理11、12分制。
根据题意可知,11分制下任意一方得胜的条件是分数大于等于11且比对方分数大至少2分。12分制同理。

既然如此,符合条件时结算输出即可,但需要注意当读入字符是 \(\texttt{E}\) 时也需要结算。

封装成函数如下:

void solve(int max_score) {
    for (int i=0; i<cnt; i++) {
        if (cf[i] != 'E'&&cf[i] != '\n') {
            if (cf[i]=='W') a++;
            else if (cf[i]=='L') b++;
        }
        if ((abs(a-b)>=2&&(a>=max_score||b>=max_score))||(cf[i] == 'E')) {//结算
            printf("%d:%d\n", a, b);
            a=b=0;
        }
    }
}

其中,\(\text{max_score}\) 是当前分制, \(\text{cnt}\) 是字符串长度,\(\text{a,b}\)分别是我方,对方得分。

最终代码如下:

#include <iostream>
#include <cmath>

using namespace std;

char cf[62525];
int a, b, cnt;
void solve(int max_score);
int main() {
    while (scanf("%c", &cf[cnt++])==1) {}
    if (cf[0]=='E') {//注意特判第一个字符就是E的情况
        printf("0:0\n\n0:0");
        return 0;
    }
    solve(11);
    putchar('\n');
    solve(21);
    return 0;
}

void solve(int max_score) {
    for (int i=0; i<cnt; i++) {
        if (cf[i] != 'E'&&cf[i] != '\n') {
            if (cf[i]=='W') a++;
            else if (cf[i]=='L') b++;
        }
        if ((abs(a-b)>=2&&(a>=max_score||b>=max_score))||(cf[i] == 'E')) {
            printf("%d:%d\n", a, b);
            a=b=0;
        }
    }
}

标签:11,分制,NOIP2003,int,max,cf,乒乓球,P1042,score
From: https://www.cnblogs.com/sleepboth/p/17618146.html

相关文章

  • 洛谷 Luogu P1038 [NOIP2003 提高组] 神经网络
    这题看着很吓人实则很简单。求输出层,正着求很麻烦,因为知不道谁连向这个点,所以可以反向建边,反着求。拓扑+dfs,时间复杂度\(\text{O(n+m)}\)#include<iostream>#include<cstdio>#include<queue>#defineN105#defineM(N*N/2+114)structE{intv,w;......
  • 算法刷题记录:乒乓球
    题目链接https://ac.nowcoder.com/acm/contest/19306/1033题目分析这题好坑,乒乓球的比分如果相差<2,还得继续比下去,但是题目里面没有说qwq。看了眼题解才发现这个点。AC代码#include<iostream>usingnamespacestd;//统计11分制和21分制的比分strings;intmain(......
  • # [NOIP2003 普及组] 乒乓球
    #[NOIP2003普及组]乒乓球题目背景国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中\(11\)分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白......
  • 【230414-1】乒乓球队的10名队员中有3名主力队员,派5名参加比赛,3名主力要安排在第一、
    ......
  • Three.js 进阶之旅:物理效果-3D乒乓球小游戏
    声明:本文涉及图文和模型素材仅用于个人学习、研究和欣赏,请勿二次修改、非法传播、转载、出版、商用、及进行其他获利行为。摘要本文在专栏上一篇内容《Three.js进阶之......
  • P1038 [NOIP2003 提高组] 神经网络
     https://www.luogu.com.cn/problem/P1038 #include<iostream>#include<queue>#include<vector>#include<cstring>usingnamespacestd;constintN=104,......
  • P1045 [NOIP2003 普及组] 麦森数——快速幂
    [NOIP2003普及组]麦森数题目描述形如\(2^{P}-1\)的素数称为麦森数,这时\(P\)一定也是个素数。但反过来不一定,即如果\(P\)是个素数,\(2^{P}-1\)不一定也是素数。到......
  • FPGA:乒乓球比赛模拟机的设计
    简介开发板:EGO1开发环境:Windows10+XilinxVivado2020数字逻辑大作业题目7:乒乓球比赛模拟机的设计乒乓球比赛模拟机用发光二极管(LED)模拟乒乓球运动轨迹,是......
  • CP1042 阶乘的尾数
    本想做个小题,没想到牵扯出了大数阶乘(悲本质上还是极限俺的做法:#include<stdio.h>intchange(intm);intmain(){ inta[20001]; intm,u; inttemp,digit,n,i,j=......
  • NC16679 [NOIP2003]神经网络
    题目链接题目题目描述人工神经网络(ArtificialNeuralNetwork)是一种新兴的具有自我学习能力的计算系统,在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。对......