P1042 [NOIP2003 普及组] 乒乓球 模拟题

Posted 幽殇默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1042 [NOIP2003 普及组] 乒乓球 模拟题相关的知识,希望对你有一定的参考价值。

在这里插入图片描述
https://www.luogu.com.cn/problem/P1042

做模拟题就按照题目的描述来就可以了。
本题的限制:

  • 两人的分数至少其中一个人的分数要大于等于11或21。
  • 俩人的分数差要大于等于2。
#include<cstdio>
#include<iostream>
#include<vector>
#include<string>
#include<cmath>
using namespace std;
char a[103000]; 
vector<string>m,n;
int main(void)
{
	int i=1;
	int score1=0,score2=0,score3=0,score4=0;
	while(cin>>a[i],a[i]!='E') i++;
	for(int j=1;j<i;j++)
	{
		if(a[j]=='W') score1++,score3++;
		else score2++,score4++;
		if((score1>=11||score2>=11)&&abs(score1-score2)>=2)
		{
			string a=to_string(score1);
			a+=":",a+=to_string(score2);
			score1=0,score2=0;
			m.push_back(a);
		}
		if( ( score3>=21||score4>=21 )&&abs(score3-score4)>=2)
		{
			string a=to_string(score3);
			a+=":",a+=to_string(score4);
			score3=0,score4=0;
			n.push_back(a);
		}
	}
	//处理最后一次 11赛制 
	string a=to_string(score1);
	a+=":",a+=to_string(score2);
	score1=0,score2=0;
	m.push_back(a);
	//处理最后一次 21赛制 
	a.clear(); 
	a=to_string(score3);
	a+=":",a+=to_string(score4);
	score3=0,score4=0;
	n.push_back(a);
	
	for(int i=0;i<m.size();i++) cout<<m[i]<<endl;
	cout<<endl;
	for(int i=0;i<n.size();i++) cout<<n[i]<<endl;
	return 0;
}

简单写法:

#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
void print(string s,int score)
{
	int a=0,b=0;
	for(int i=0;i<s.size();i++)
	{
		if(s[i]=='W') a++;
		if(s[i]=='L') b++;
		if(s[i]=='E') 
		{
		    cout<<a<<":"<<b<<endl;
		    break;
		}
		if(max(a,b)>=score&&abs(a-b)>=2)
		{
			cout<<a<<":"<<b<<endl;
			a=0,b=0;
		}
	}
}
int main(void)
{
	string s,a;
	while(cin>>a) s+=a;
	print(s,11);
	cout<<endl;
	print(s,21);
	return 0;
} 

以上是关于P1042 [NOIP2003 普及组] 乒乓球 模拟题的主要内容,如果未能解决你的问题,请参考以下文章

算法1-1模拟与高精度

算法1-1模拟与高精度

[NOIP2003] 普及组

P1042 乒乓球

P1042 乒乓球

洛谷 P1042 乒乓球 题解