洛谷题单指南-模拟和高精度-P1042 [NOIP2003 普及组] 乒乓球
原题链接:https://www.luogu.com.cn/problem/P1042
题意解读:
分别针对11分制和21分制,输出每局比分。只需要判断一局的结束条件:得分高者如果达到11或者21,且比分间隔大于等于2分,则表示一局结束,
可开始下一局,用模拟法即可解决。
100分代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 2505;
string all;
int cnt;
int scores[2] = {11, 21};
int main()
{
// 先将全部字符串读入all中
string line;
while(getline(cin, line)) all += line;
// 针对11分、21分制分别处理
for(int i = 0; i < 2; i++)
{
int score = scores[i];
int w = 0, l = 0; // 比分初始值
for(int j = 0; j < all.size(); j++)
{
if(all[j] == 'W') w++; // 华华得分
else if(all[j] == 'L') l++; // 对手得分
else if(all[j] == 'E') break; // 比赛结束
//如果得分超过11或者21,且比分间隔>=2,表示一局结束,输出比分
if(max(w, l) >= score && abs(w - l) >= 2)
{
cout << w << ":" << l << endl;
w = l = 0;
}
}
// 如果一局比赛未结束,也要输出本局比分
cout << w << ":" << l << endl;
//11分制和21分制之间有换行
if(i == 0) cout << endl;
}
return 0;
}