原题传送门
(Thinking)
看到这么冗长的题面 这道题是一道纯模拟题,主要来看思路
思路也很简单:
开一个(win[i])数组,来记录(Player 1)和(Player 2)的胜场数
for(int i=1;cin>>str&&str!='E';i++){ //单个字符读入&防止E及以后的读入
if(str=='W') win[i]=1;
if(str=='L') win[i]=2;
}
在统计时,分为11分和21分两个部分来操作、步骤基本一致。
- (win[i]==1 player1++)
- (win[i]==2 player2++)
- (win[i]==0 print player1=player2=0)
- 判断获胜者
(Code)
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
inline void read(int &x){
int f=1;
char ch=getchar();
x=0;
while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
x*=f;
}
char str;
int win[70000];
int p1,p2;
int main(){
for(int i=1;cin>>str&&str!='E';i++){
if(str=='W') win[i]=1;
if(str=='L') win[i]=2;
}
for(int i=1;;i++){ //11分统计
if(win[i]==1) p1++;
if(win[i]==2) p2++;
if(win[i]==0){
printf("%d:%d
",p1,p2);
break;
}
if(p1-p2>=2||p2-p1>=2){
if(p1>=11||p2>=11){
printf("%d:%d
",p1,p2);
p1=p2=0;
}
}
}
cout<<endl;
p1=p2=0;
for(int i=1;;i++){ //21分统计
if(win[i]==1) p1++;
if(win[i]==2) p2++;
if(win[i]==0){
printf("%d:%d
",p1,p2);
break;
}
if(p1-p2>=2||p2-p1>=2){
if(p1>=21||p2>=21){
printf("%d:%d
",p1,p2);
p1=p2=0;
}
}
}
return 0;
}