Skip to content
Author: loop3r
Date: 20260223
tag: 模拟
link: https://www.luogu.com.cn/problem/P1042

问题描述

link

分析

按题意模拟,使用数组记录从最开始到结束时华华的得分情况,如果赢则记为 1 ,输则记为 0。对于每种比赛规则,遍历数组,统计当前的胜负场数,如果满足结束条件则输出比分并重置统计数据。注意,最后不要忘记输出正在进行的比赛结果。

参考代码

cpp
#include <bits/stdc++.h>
using namespace std;

int f[2] = {11, 21};
int a[25 * 2500 + 10], n = 0;

int main() {
    char c;
    while (true) {
        cin >> c;
        if (c == 'E') break;
        if (c == 'W') a[n++] = 1; // 华华赢
        if (c == 'L') a[n++] = 0; // 华华输
    }

    for (int k = 0; k < 2; k++) {
        int w = 0, l = 0;
        for (int i = 0; i < n; i++) {
            w += a[i];
            l += 1 - a[i];
            if ((max(w, l) >= f[k]) && abs(w - l) >= 2) {
                cout << w << ":" << l << endl;
                w = l = 0;
            }
        }
        cout << w << ":" << l << endl;
        cout << endl;
    }

    return 0;
}