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 普及组] 乒乓球 模拟题的主要内容,如果未能解决你的问题,请参考以下文章