题目内容
大意:给出一串乒乓球对战结果,分析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;
}
留言