1. 程式人生 > >2018年全國多校算法寒假訓練營練習比賽(第二場)A.吐泡泡

2018年全國多校算法寒假訓練營練習比賽(第二場)A.吐泡泡

兩種 mark 例如 mes names urn mar code else

原題鏈接

描述

小魚兒吐泡泡,嘟嘟嘟冒出來。小魚兒會吐出兩種泡泡:大泡泡"O",小泡泡"o"。
兩個相鄰的小泡泡會融成一個大泡泡,兩個相鄰的大泡泡會爆掉。
(是的你沒看錯,小氣泡和大氣泡不會產生任何變化的,原因我也不知道。)
註意:自左到右進行合並.
例如:ooOOoooO經過一段時間以後會變成oO。

輸入

數據有多組,處理到文件結束。
每組輸入包含一行僅有‘O‘與‘o‘組成的字符串。

輸出

每組輸出僅包含一行,輸出一行字符串代表小魚兒吐出的泡泡經過融合以後所剩余的泡泡。

樣例輸入

ooOOoooO

樣例輸出

oO

思路

用棧模擬就好,水題

代碼

#include <bits/stdc++.h>
#define ll long long
using namespace std;

void check(char ans[], int len)
{
    if(len == 0) return;
    while(ans[len] == ans[len-1])
    {
        ans[len] = ‘\0‘; len--;
        if(ans[len] == ‘o‘) ans[len] = ‘O‘;
        else ans[len--] = ‘\0‘;
        if(len <= 0) return;
    }
}

int main()
{
    char s[102];
    while(~scanf("%s", s))
    {
        char ans[102];
        int f = 1;
        while(f)
        {
            memset(ans,0,sizeof(ans));
            ans[0] = s[0]; int j = 1; f = 0;
            int len = strlen(s);
            for(int i = 1; i < len; i++)
            {
                int j = strlen(ans);
                ans[j] = s[i];
                check(ans, j);
            }
            memset(s,0,sizeof(s));
            for(j = 0; ans[j] != ‘\0‘; j++)
                s[j] = ans[j];
            s[j] = ‘\0‘;
        }
        printf("%s\n", s);
    }
    return 0;
}

2018年全國多校算法寒假訓練營練習比賽(第二場)A.吐泡泡