題目連結: https://zerojudge.tw/ShowProblem?problemid=c123
# 解題思路
開一個佇列紀錄輸入的順序,開一個堆疊紀錄 1~n 的排序,
如果堆疊最上方的元素跟佇列的第一個元素一致,即可將其抵銷 (互消)
如果最後堆疊 (或佇列) 沒有元素了就有可能完成排序
# 程式碼
#include <bits/stdc++.h> | |
using namespace std; | |
int main(){ | |
int n; | |
while(cin>>n&&n) | |
{ | |
int f; | |
while(cin>>f&&f) | |
{ | |
queue<int,list<int> > q; | |
q.push(f); | |
stack<int,list<int> > s; | |
for(int i=1;i<n;i++) | |
cin>>f,q.push(f); | |
for(int i=1;i<=n;i++) | |
{ | |
s.push(i); | |
while(!s.empty()&&s.top()==q.front()) | |
s.pop(),q.pop(); | |
} | |
cout<<(!s.empty()?"No\n":"Yes\n"); | |
} | |
cout<<'\n'; | |
} | |
} |