題目連結: 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';
    }
}
更新於 閱讀次數

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

Zrn Ye LinePay

LinePay