P1042 乒乓球 (模拟)
题意:给若干行字符串求11分制和21分制下的比分全部输出。
思路:用getchar读入,一边读一边记录,对11分制来说,若有一方分数大于等于11且两者比分差大于等于2则记录下比分,然后初始化状态继续。注意的细节:—detail1—:结束后还需记录一下最后的比分,比如1:2还没有比完的比分。 —detail2— : 0:0也算比分。
即输入EWLWLWL 要输出
0:0
0:0
AC代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
struct p{
int x,y;
}e[N],f[N];
int main(){
char c;
int a[2]={},b[2]={},cnt[2]={},k1=0,k2=0;
while((c=getchar())!='E'){
cnt[0]++,cnt[1]++;
if(c=='W'){
a[0]++,b[0]++;
}
else if(c=='L'){
a[1]++,b[1]++;
}
if((a[0]>=11||a[1]>=11)&&abs(a[0]-a[1])>=2) e[++k1].x=a[0],e[k1].y=a[1],cnt[0]=a[0]=a[1]=0;
if((b[0]>=21||b[1]>=21)&&abs(b[0]-b[1])>=2) f[++k2].x=b[0],f[k2].y=b[1],cnt[1]=b[0]=b[1]=0;
}
e[++k1].x=a[0],e[k1].y=a[1];
f[++k2].x=b[0],f[k2].y=b[1];
for(int i=1;i<=k1;i++)
printf("%d:%d\n",e[i].x,e[i].y);
puts("");
for(int i=1;i<=k2;i++)
printf("%d:%d\n",f[i].x,f[i].y);
return 0;
}