P1042 [NOIP2003 普及组] 乒乓球
考点:模拟、字符串
讲评视频:稍后上传
题意&分析
- 根据题意模拟对接情况进行输出即可,分为 11 11 11 分制和 21 21 21 分制。
- 输出一次对局情况,要满足的条件有
2
2
2 个,其中
n
=
11
/
21
n=11/21
n=11/21 。
- 如果某一方得分达到 n n n 分。
- 双方的比分差值要大于等于 2 2 2。
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 70000;
char ch[N];
int cnt; // 统计有效的比赛场次数量
void solve( int n ) {
int w = 0, l = 0; // 声明并初始化比分情况
for (int i = 1; i < cnt; i++)
{
if ( ch[i] == 'W' ) w++; // 统计当前局的比分
else l++;
if ( (w >= n || l >= n) && ( abs(w - l) >= 2 ) ) // 其中一方达到了 n 分,并且比分差值大于等于 2
{
cout << w << ":" << l << endl; // 比分情况
w = l = 0; // 开始新一轮的比分统计
}
}
cout << w << ":" << l << endl; // 最后一轮剩有的比分
}
int main() {
// 循环读入
while ( cin >> ch[++cnt] && ch[cnt] != 'E' );
solve( 11 ); // 处理 11 分制
cout << endl;
solve( 21 ); // 处理 21 分制
return 0;
}
对于题目有任何疑问,可以私信作者~