程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> zoj - 1259 - Rails

zoj - 1259 - Rails

編輯:C++入門知識

——>>暑假曾在汝佳神牛的白書上見過這題,原來在zoj上也有……順序序列與目標序列匹配,匹配上就轉到一節車廂;不能的話再用棧頂與目標序列匹配;也不能的話看順序序列能否放入棧中,能就繼續,不能就“No”。只可惜……“Yes”被我寫成了“YES”, ”No"被我寫成了“NO”,WA了3次!!!每塊後都加空行被我弄成了塊間加空行,又"PE"了一次......AC之路不容易的呀……
[cpp]
#include <iostream> 
#include <stack> 
 
using namespace std; 
 
const int maxn = 1000 + 10; 
 
int main() 

    int N, i; 
    int target[maxn];       //用來存目標序列 
    while(cin>>N) 
    { 
        if(N == 0) return 0; 
 
        while(cin>>target[1]) 
        { 
            if(target[1] == 0) break;       //一組測試結束 
 
            for(i = 2; i <= N; i++) 
                cin>>target[i]; 
 
            stack<int> st; 
            int init = 1, cur = 1, ok = 1;      //init為初始序列,即1,2,3...,cur為目標序列的下標,ok為能否轉換的標記 
            while(cur <= N)     //一直到匹配完所有的車廂 
            { 
                if(init == target[cur])     //當駛來的車廂號與目標序列車廂號匹配時 
                { 
                    init++;     //轉到匹配下一節車廂 
                    cur++;      //轉到匹配下一節車廂 
                } 
                else if(!st.empty() && st.top() == target[cur])     //當棧中的車廂號與目標序列車廂號匹配時 
                { 
                    st.pop();       //退棧,轉到匹配下一節車廂 
                    cur++;          //轉到匹配下一節車廂 
                } 
                else if(init <= N)      //如果不相匹配但還沒到始入的最後一輛車廂時 
                { 
                    st.push(init++);        //駛入車廂進棧,且轉到下一節車廂 
                } 
                else        //如果不相匹配且已到始入的最後一輛車廂時 
                { 
                    ok = 0; 
                    break; 
                } 
            } 
            if(ok) cout<<"Yes"<<endl; 
            else cout<<"No"<<endl; 
        } 
        cout<<endl; 
    } 
    return 0; 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved