P1042 乒乓球 (模拟)

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;
}
发布了63 篇原创文章 · 获赞 49 · 访问量 2841

猜你喜欢

转载自blog.csdn.net/weixin_45750972/article/details/105310461