題目: UVa - 514 - Rails
題目說明
給一個整數 n
,代表有 1, 2, ..., n
個火車,每個火車入站可以直接出站或是等後面的火車入站並出站後再出站,簡單來講就是像 Stack 一樣。給一串數字代表火車出站的順序,若可以達成則輸出 "Yes"
否則輸出 "No"
。
解題思路
使用 Stack 模擬火車入站出站,使用 Queue 儲存出站順序,若是 Stack 的 top()
與 Queue 的 front()
相同則兩者都不斷 pop()
,直到兩者不相同或是 Stack 為空,結束後若 Stack 為空則表示這個順序是可行的。
參考解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #include <iostream> #include <queue> #include <stack>
using namespace std;
static auto __ = [] { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); return 0; }();
int main() { int T, tmp; while (cin >> T && T) { while (cin >> tmp && tmp) { stack<int> s; queue<int> q; q.push(tmp); for (int i = 1; i < T; ++i) cin >> tmp, q.push(tmp); for (int i = 1; i <= T; ++i) { s.push(i); while (!s.empty() && s.top() == q.front()) s.pop(), q.pop(); } cout << (s.empty() ? "Yes\n" : "No\n"); } cout << '\n'; } }
|