Created
September 15, 2018 06:39
-
-
Save completejavascript/ef6aa3d64ae0b5d3eef91ac18b8c4df1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
using namespace std; | |
const int MAX = 1005; | |
int Order[MAX]; // Thứ tự ban đầu của những chiếc xe | |
int Stack[MAX]; // Biểu diễn ngăn xếp stack, tương ứng với đoạn đường bên cạnh | |
int St_size; // Độ dài ngăn xếp | |
int Check; // Lưu kết quả | |
int main() | |
{ | |
//freopen("input.txt","r",stdin); | |
int N = 0; | |
while(true) | |
{ | |
// Nhập đầu vào là số lượng xe | |
cin >> N; | |
if(N == 0) break; | |
for(int i = 0; i < N; i++) | |
cin >> Order[i]; | |
St_size = 0; | |
Check = true; | |
// Chỉ số xe có thể đi, ban đầu có giá trị 1 | |
int start = 1; | |
// Duyệt từng xe | |
for(int i = 0; i < N; i++) | |
{ | |
// Kiểm tra xem nếu đỉnh ngăn xếp có giá trị start thì cho đi | |
while(St_size > 0 && Stack[St_size-1] == start) | |
{ | |
St_size--; | |
start++; | |
} | |
// Nếu đầu dãy là start thì cho đi, tăng start lên 1 đơn vị | |
if(Order[i] == start) start++; | |
else if (St_size > 0 && Stack[St_size-1] < Order[i]) | |
{ | |
// Nếu trường hợp này xảy ra thì chắc chắn sẽ không thoả mãn. | |
// Vì trường hợp này ta sẽ phải cho điểm ở đầu dãy vào ngăn xếp | |
// Mà sau khi cho xong thì tồn tại 1 điểm có giá trị nhỏ hơn | |
// (ưu tiên cao hơn) | |
// điểm ở đầu ngăn xếp, mà nó lại không thể đi ra được. | |
Check = false; | |
break; | |
} | |
else // Cho điểm đầu của dãy vào ngăn xếp. | |
{ | |
Stack[St_size] = Order[i]; | |
St_size++; | |
} | |
} | |
if(Check) cout << "yes" << endl; | |
else cout << "no" << endl; | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment