题目内容

P1042

大意:给出一串乒乓球对战结果,分析11分制和21分制的异同。只有当有一人分数到达11或21分且分差大于等于2时一局才结束。

解题思路

纯模拟,但我半年前看了一点思路都没有,可能是因为语文不好读不懂乒乓球的规则吧。一局比赛的结束一定是两者中一人到达11或21分且两者分差大于等于2分。然后最后如果新开了一局,也一定要输出0:0

注意E后面的东西要忽略掉。

具体的思路是先读入,然后分别根据两种分制离线处理(因为做不到在线)。

#include <cstdio>

int a[25*2500+5],n=0;//a数组一定要开足
int f[2]={11,21};//两种分制下的分数

inline int abs(int x)//绝对值
{
    return x>=0?x:-x;
}

int main()
{
    char c;
    while(1)
    {
        c=getchar();//听说getchar会快
        if(c=='E')//读到E就停止
            break;
        if(c=='W')
            a[++n]=1;//1代表这球华华赢的
        if(c=='L')
            a[++n]=0;//否则就是0
    }
    for(int k=0;k<2;k++)//开始统分
    {
        int tmp1=0,tmp2=0;//分别记录双方得分
        for(int i=1;i<=n;i++)
        {
            if(a[i])//积分
                tmp1++;
            else
                tmp2++;
            if((tmp1>=f[k] || tmp2>=f[k]) && abs(tmp1-tmp2)>=2)//如果满足一局结束的标准
            {
                printf("%d:%d\n",tmp1,tmp2);
                tmp1=tmp2=0;//每次清零
            }
        }
        printf("%d:%d\n\n",tmp1,tmp2);//最后没进行完的也要输出而且要空行
    }
    return 0;
}
最后修改日期:2020年3月1日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。