題目連結: https://zerojudge.tw/ShowProblem?problemid=a565

# 內容

我們將給你一份等待配對的名單,其中「p」代表男生,「q」代表女生,配對的條件很簡單,只要 p 跟 q 的位置是「面對面」(亦即「pq」),就代表彼此相看兩不厭,可被視為一對。成功配對後,該 pq 對就被移出等候配對名單,讓其他的 p 與 q 可以有機會繼續配對。你的目標就是計算有幾組人面對面?

# 解題思路

建立一個空的堆疊,每當讀到一個 p 就將其加入堆疊,若讀到 q 則判斷堆疊是否為空,若不為空,則將從堆疊上取走一個 p,並總數加一,否則忽視。

# 程式碼

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    scanf("%d\n",&n);
    while(n--){
        stack <char> sk;
        int cnt=0;
        while(1){
            char c=getchar();
            if(c=='.')
                continue;
            else if(c=='p')
                sk.push('p');
            else if(c=='q')
                if(!sk.empty()&&sk.top()=='p')
                    sk.pop(),cnt++;
            else
                break;
        }
        printf("%d\n",cnt);
    }
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay