洛谷P1402——乒乓球

原題連接: https://www.luogu.com.cn/problem/P1042

題面簡述

國際乒聯如今主席沙拉拉自從上任以來就立志於推行一系列改革,以推進乒乓球運動在全球的普及。其中11分制改革引發了很大的爭議,有一部分球員由於沒法適應新規則只能選擇退役。華華就是其中一位,他退役以後走上了乒乓球研究工做,意圖弄明白11分制和21分制對選手的不一樣影響。在開展他的研究以前,他首先須要對他多年比賽的統計數據進行一些分析,因此須要你的幫忙。
華華經過如下方式進行分析,首先將比賽每一個球的勝負列成一張表,而後分別計算在11分制和21分制下,雙方的比賽結果(截至記錄末尾)。ios

好比如今有這麼一份記錄,(其中W表示華華得到一分,L表示華華對手得到一分):c++

WWWWWWWWWWWWWWWWWWWWWWLW算法

在1111分制下,此時比賽的結果是華華第一局11比0獲勝,第二局11比0獲勝,正在進行第三局,當前比分1比1。而在21分制下,此時比賽結果是華華第一局21比0獲勝,正在進行第二局,比分2比1。若是一局比賽剛開始,則此時比分爲0比0。直到分差大於或者等於2,才一局結束。spa

你的程序就是要對於一系列比賽信息的輸入(WL形式),輸出正確的結果。code

輸入格式

每一個輸入文件包含若干行字符串,字符串有大寫的W、L和E組成。其中EE表示比賽信息結束,程序應該忽略E以後的全部內容。字符串

輸出格式

輸出由兩部分組成,每部分有若干行,每一行對應一局比賽的比分(按比賽信息輸入順序)。其中第一部分是11分制下的結果,第二部分是21分制下的結果,兩部分之間由一個空行分隔。get

算法標籤

\(\fbox{模擬}\) \(\fbox{字符串處理}\)字符串處理

思路

輸入,掃兩遍,照着題意來模擬。
\(\fbox{規則:一方得滿11分+另外一方與這一方分差>=2}\)it

代碼

#include <bits/stdc++.h>
using namespace std;
unsigned int c[625000];
signed main() {
    ios::sync_with_stdio(0);
    char s;
    long long clength = 0;
    while(s!='E') {
        if(s=='W') {
            c[clength] = 1;
            clength++;
        } else if(s=='L') {
            c[clength] = 2;
            clength++;
        }
        s = getchar();
    }
    if(s=='E') {
        c[clength] = 9;
    }
    long long i = 0;
    long long w = 0;
    long long l = 0;
    long long d = 0;
    while(c[i]!=9) {
        if(c[i]==1) {
            w++;
        } else if(c[i]==2) {
            l++;
        }
        if((l>=11||w>=11)&&(abs(w-l)>=2)) {
            printf("%lld:%lld\n",w,l);
            w = 0;
            l = 0;
            d++;
        }

        i++;
    }
    if(d*11!=clength-1) {
        printf("%lld:%lld\n\n",w,l);
    }

    i = 0;w = 0;l = 0;d = 0;
    while(c[i]!=9) {
        if(c[i]==1) {
            w++;
        } else if(c[i]==2) {
            l++;
        }
        if((l>=21||w>=21)&&(abs(w-l)>=2)) {
            printf("%lld:%lld\n",w,l);
            w = 0;
            l = 0;
            d++;
        }

        i++;
    }
    if(d*21!=clength-1) {
        printf("%lld:%lld\n\n",w,l);
    }
}

注意!if((l>=21||w>=21)&&(abs(w-l)>=2)) 需是>=,由於有:11-10 -> 11-11 -> 11-12 -> 12-12 -> 13 -> 12 -> ...的狀況

相關文章
相關標籤/搜索