#24415: 自用


soyana66687@gmail.com (Dino\n)

學校 : 國立臺中科技大學
編號 : 97371
來源 : [60.250.9.66]
最後登入時間 :
2022-07-02 20:52:24
c123. 00514 - Rails -- UVa514 | From: [36.234.137.198] | 發表日期 : 2021-02-16 16:11

#include <iostream>

#include <stack>

 

using namespace std;

 

int main() {

    int n;

    while (cin >> n && n){

        while (1){

            int a[n], point = 1;//a陣列 用來存取輸入 point 代表 現在A站中 第一台車廂的編號  假設在A站剛開走4(包含)以下的所有車子

            stack <int> stk;//stk為車站                                                     那此時A站的第一台車廂編號為5 ,所以point=5

            cin >> a[0];

            if (a[0] == 0) break;//如果輸入0 表示資料輸入完畢

            for (int i = 1; i < n; i++){//

                cin >> a[i];

            }

            int i;

            for (i = 0; i < n; i++){

                if (!stk.empty() && stk.top() == a[i]){//  程式碼用途:

                    stk.pop();//                            1.查看車站堆中(stk)的最上層是否有輸入的值 

                }else if (a[i] >= point){//                2.查看A站中是否有輸入的值 如果有,將輸入值以下的所有車廂推入車站

                    for (int j = point; j < a[i]; j++){//    假設A有4 3 2 1,而現在只要將4開去B站,那得先將4 3 2 1都開進去車站,才能將4再開出去

                        stk.push(j);//                      所以if else 是在判斷:

                    }//                                      if(車站中有車 並且 車站堆最上層剛好等於輸入值)->將車子從車站開出去

                    point = a[i] + 1;//                      else if(輸入值比point大)->表示車廂在A站,將 輸入值 以下所有A站車廂開去車站 並將point設為 輸入值+1

                }else{//                                     else 此種排列為不可能

                    break;

                }

            }

            if (i == n){//如果i的for迴圈完整執行 那執行完的i會等於n 

                cout << "Yes" << endl;//                                          如果仍覺得難懂,可以執行看看以下程式

            }else{//                                                                int i=0;

                cout << "No" << endl;//                                             for(i=0;i<5;i++){cout<<"now i="<<i<<endl;}

            }                         //                                             cout<<"the end of i="<<i<<endl;

        }                             //                                           最後的the end of i會等於5

        cout << endl;

    }

    return 0;

}

 

 
#24416: Re:自用


soyana66687@gmail.com (Dino\n)

學校 : 國立臺中科技大學
編號 : 97371
來源 : [60.250.9.66]
最後登入時間 :
2022-07-02 20:52:24
c123. 00514 - Rails -- UVa514 | From: [36.234.137.198] | 發表日期 : 2021-02-16 16:14

此程式碼全出自

https://yuihuang.com/zj-c123

YUI HUANG 之手 小的只是在旁下註解

 
ZeroJudge Forum