題目連結: 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); | |
} | |
} |