NOIP2003乒乓球(字符串)

时间:2021-11-02 10:02:06

描述

华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在11分制和21分制下,双方的比赛结果(截至记录末尾)。
比赛规则和实际比赛规则相同, 在11分制下比分为10:11时还要继续比赛,直到分数差距达到2分;同理21分制下比分为20:21的时候也还要继续比赛。
比如现在有这么一份记录,(其中W表示华华获得一分,L表示华华对手获得一分):
WWWWWWWWWWWWWWWWWWWWWWLW
在11分制下,此时比赛的结果是华华第一局11比0获胜,第二局11比0获胜,正在进行第三局,当前比分1比1。而在21分制下,此时比赛结果是华华第一局21比0获胜,正在进行第二局,比分2比1。如果一局比赛刚开始,则此时比分为0比0。
你的程序就是要对于一系列比赛信息的输入(WL形式),输出正确的结果。

输入格式

每个输入文件包含若干行字符串(每行至多20个字母),字符串有大写的W、L和E组成,也许中间有若干个空格。其中E表示比赛信息结束,程序应该忽略E之后的所有内容,E后面可能有干扰文字。

输出格式

输出由两部分组成,每部分有若干行,每一行对应一局比赛的比分(按比赛信息输入顺序)。其中第一部分是11分制下的结果,第二部分是21分制下的结果,两部分之间由一个空行分隔。

样例输入1

WWWWWWWWWWWWWWWWWWWW
WWLWE

样例输出1

11:0
11:0
1:1

21:0
2:1

限制

各个测试点1s
提示
十分简单,小心输入输出格式!^_^

一个简单的模拟 第一次WA了 直接找不出错误,还是又重写了一遍才过的

#include<cstdio>//第一遍50分
#include<iostream>
#include<algorithm>
using namespace std;
char s;
int vct,sum;
int a1[10000],a2[10000];
int b1[10000],b2[10000];
int abs(int a) {
    if(a<0) a=-a;
    return a;
}
int main() {
    freopen("13.in","r",stdin);
    while(cin>>s) {
        if(s=='E') break;
        if(s=='W') {
            a1[vct]++;
            b1[sum]++;
            if(a1[vct]>=11&&abs(a1[vct]-a2[vct]>=2)) vct++;
            if(b1[sum]>=21&&abs(b1[sum]-b2[sum]>=2)) sum++;
        }
        if(s=='L') {
            a2[vct]++;
            b2[sum]++;
            if(a2[vct]>=11&&abs(a1[vct]-a2[vct]>=2)) vct++;
            if(b2[sum]>=21&&abs(b1[sum]-b2[sum]>=2)) sum++;
        }
    }
    for(int i=0;i<=vct;i++) printf("%d:%d\n",a1[i],a2[i]);
    if(a1[vct+1]||a2[vct+1]) printf("%d:%d\n",a1[vct+1],a2[vct+1]);
    printf("\n");
    for(int i=0;i<=sum;i++) printf("%d:%d\n",b1[i],b2[i]);
    if(b1[sum+1]||b2[sum+1]) printf("%d:%d\n",b1[sum+1],b2[sum+1]);
    return 0;
}
#include<iostream>//AC代码
#include<cmath>
#include<string>
using namespace std;
int main(){
    string s1,s2;
    while(getline(cin,s2))s1+=s2;
    int i=0;
    int a=0,b=0;
    while(s1[i]!='E'){
        switch(s1[i]){
            case 'W':a++;break;
            case 'L':b++;break;
        }
        if((a>=11||b>=11)&&abs(a-b)>=2){
            cout<<a<<':'<<b<<endl;
            a=b=0;
        }
        i++;
    }
    cout<<a<<':'<<b<<endl;
    cout<<endl;
    i=0,a=0,b=0;
    while(s1[i]!='E'){
        switch(s1[i]){
            case 'W':a++;break;
            case 'L':b++;break;
        }
        if((a>=21||b>=21)&&abs(a-b)>=2){
            cout<<a<<':'<<b<<endl;
            a=b=0;
        }
        i++;
    }
    cout<<a<<':'<<b<<endl;
    return 0;
}