1 条题解

  • 0
    @ 2026-10-19 1:36:07

    [NOIP 2003 普及组] 乒乓球

    知识点

    模拟、字符串、状态维护

    解题思路

    读取W/L直到第一个E,之后全部忽略。分别按11分制、21分制扫描记录。某方至少达到目标分且净胜至少2分时输出该局并清零;记录结束后总要输出当前局,哪怕为0:0。两套结果间空一行。

    正确性说明

    每个字符恰为一次得分。状态保存当前局双方累计分数,达到结束条件时输出并清零与规则一致。结束后当前局代表未完比赛或刚开始的新一局,因此必须额外输出一次。两次独立模拟分别完整满足计分规则。

    易错点

    不能一到11或21就结束,必须净胜两分;恰结束时末尾还有0:0;E之后不得继续计分。

    复杂度

    时间O(L),空间O(L)保存赛况。

    参考代码(GNU C++17)

    #include<bits/stdc++.h>
    using namespace std;
    void show(const string&s,int limit){int a=0,b=0;for(char c:s){if(c=='W')a++;else b++;if(max(a,b)>=limit&&abs(a-b)>=2){cout<<a<<':'<<b<<'\n';a=b=0;}}cout<<a<<':'<<b<<'\n';}int main(){ios::sync_with_stdio(false);cin.tie(nullptr);string s;char c;while(cin>>c){if(c=='E')break;if(c=='W'||c=='L')s+=c;}show(s,11);cout<<'\n';show(s,21);}
    
    • 1

    信息

    ID
    892
    时间
    1000ms
    内存
    128MiB
    难度
    进阶
    标签
    递交数
    1
    已通过
    1
    上传者