鐵軌(UVa 514)
PopPush城市有一座著名的火車站。這個國家到處都是丘陵。而這個火車站是建於上一個世紀。不幸的是,那時的資金有限。所以只能建立起一條路面鐵軌。而且,這導致這個火車站在同一個時刻只能一個軌道投入使用,因為它缺少空間,兩列火車將無路可走。具體看下圖。
當地的慣例是每一列火車從A方向駛向B方向時候,會用某種方式將車廂重組。假設火車將要到達A方向,擁有N個車廂(N<=1000),這些車廂按照遞增順序標記為1到N。負責從組車廂的領導,必須知道是否能從組車廂讓它駛出B,而這個重組的序列就是a1\a2\a3…aN.幫組他並且寫一個程式來判斷是否可能按照所要求的車廂順序。你可以假設,單個的車廂可以從列車上分離出來,在他們進入站臺之前。並且他們可以自由移動,知道它們上了B軌道。你也可以假設在任意時候站臺可以放下無數的車廂。但是隻要一個車廂進入站臺,它就不能返回A軌道,同時如果它離開了站臺駛向B軌道,它就不能返回站臺。
在中轉站C中,車廂符合先進後出的原則,因此是一個棧。程式碼如下
#include<iostream>
#include<stdio.h>
#include<stack>
using namespace std;
const int MAXN = 1000 + 10;
int n, target[MAXN];
int main()
{
while(scanf("%d", &n) == 1) //輸入 一共n輛火車
{
stack<int> s; //宣告棧S
int A = 1, B = 1; // A:進站順序 1,2,3,...,n B:出站順序(陣列target的下標)
for(int i = 1; i <= n; i++)
{
scanf("%d", &target[i]); //輸入出站順序
}
int ok = 1; //標誌,是否可以按順序出站
while(B <= n)
{
if(A == target[B]) //要進站的火車與要出站的火車為同一輛,則進站後直接出站
{
A++; B++;
}
else if(!s.empty() && s.top() == target[B]) //棧(站)非空,棧頂與要出站的火車相同,則出站
{
s.pop();
B++; //要出站的++
}
else if(A <= n) //要進站的與出站的不同,只進站,先等著,當棧頂與目標相同時再出(上一個if)
{
s.push(A++);
}
else
{
ok = 0; //正常結束迴圈為b=n, 若前幾種情況都不符合,則不能按照要求順序出站,break
break;
}
}
printf("%s\n", ok ? "Yes" : "No");
}
return 0;
}
相關推薦
鐵軌(UVa 514)
PopPush城市有一座著名的火車站。這個國家到處都是丘陵。而這個火車站是建於上一個世紀。不幸的是,那時的資金有限。所以只能建立起一條路面鐵軌。而且,這導致這個火車站在同一個時刻只能一個軌道投入使用,因為它缺少空間,兩列火車將無路可走。具體看下圖。 當地的慣例
例題6-2(Rails, UVa 514)
using view 存儲 st表 get problem body closed 分享 題目鏈接 給定入棧順序,問能否以給出的順序出棧。 眾所周知,棧的特點是先入後出。 此特點在該題中體現為對於當前需要出棧的元素(要想先出),必須
B - Parentheses Balance (UVA - 673)
etc std 括號 while ets space 字符 ret light - 題目大意 給出兩個字符()【】,然後根據給的條件來判斷。 - 解題思路 根據給的三個條件,然後利用棧來處理,對於暫時沒有後括號匹配的前括號壓入棧,遇到後括號時看棧頂的前括號
E - The Blocks Problem ( UVA - 101)
num continue blog while break ++ log pos 很多 - 題目大意 先理解給出的四個移動方式: move a onto b:把木塊a、b上的木塊放回各自的原位,再把a放到b上; move a over b:把a上的木塊放回各
D - Send a Table (UVA - 10820)
存儲 names long long ems cst int nbsp 兩個 cstring - 題目大意 給出一個n,求從1~n中任意兩個數互質的對數為多少,(a,b)和(b,a)算兩對。 - 解題思路 構造一個歐拉函數的方法,然後用一個數組去存儲下標,
反片語(UVa 156)
Description: 輸入一些單詞,找出所有滿足如下條件的單詞:該單詞不能通過字母重排,得到輸入文字中的另外一個單詞。在判斷是否滿足條件時,字母不分大小寫,但在輸出時應保留輸入中的大小寫,按字典序進行排列(所有大寫字母在所有小寫字母的前面) Sample input: Disk came
Spreading the Wealth( UVA - 11300)
題目連結: Spreading the Wealth UVA - 11300 Problem A Communist regime is trying to redistribute wealth in a village. They have have d
Hello World!(UVA - 11636)
題目連結:Hello World! UVA - 11636 解題思路:打表二分查詢hello world最小複製次數。 程式碼如下: #include<iostream> #include<stdio.h> #include<str
bfs 逃出火源(UVA 11624)
你的任務是幫助Joe走出一個大火蔓延的迷宮。Joe每分鐘可以走到上下左右4個方向的相鄰格之一,而所有著火的格子都會往四周蔓延(即如果某個空格與著火格有公共邊,則下一分鐘這個空格將著火)。迷宮中有一些障礙格,Joe和火都無法進入。當Joe走到一個迷宮的邊界格子時,我們認為他已經出了迷宮。求他走出迷宮的
救濟金髮放(uva-133)
N個人占城一圈,逆時針編號為1~n.有兩個官員,A從1開始逆時針數,B從n順時針開始。在每一輪中,官員A數k個數就停下來,官員B數m個就停下來(注意有可能連個官員停在同一個人上)。接下來被官員選中的人離開隊伍。 輸入n,k,m輸出每輪裡被選中的人的編號(如果有兩個人)先輸出
The Dole Queue(子過程設計)(UVa 133)
In a serious attempt to downsize (reduce) the dole queue, The New National Green Labour Rhinoceros Party has decided on the following strategy. Every d
「日常訓練」The Necklace(UVA-10054)
null size isempty for ges amp emp exti pty 代碼 for(int i=0; i!=n; ++i) { int u = cin.nextInt();
紫書例題6-3 (UVa 442)
for lse cout 例題 gif src cstring opened ble 題目地址:https://vjudge.net/problem/UVA-442 題目大意:汗顏,其實我是直接看紫書的中文題意的,大意就是計算兩個矩陣乘法次數,設計線性代數知識,可自己百
安迪的第一個字典(UVa 10815)
【問題描述】輸入一個文字,找出所有不同的單詞(連續的字母序列),按字典序從小到大輸出。單詞不區分大小寫。 【樣例輸入】 Adventures in Disneyland Two blondes were going to Disneyland when they
例題:油田(UVa 572)
輸入一個m行n列的字元矩陣,統計字元@組成多少個八連塊。如果兩個字元@所在的格子相鄰(橫豎或者對角線方向),就說他們屬於同一個八連塊。 Sample Input 1 1 * 3 5 *@*@*
Fractions Again?! (UVA - 10976)
actions stdio.h () urn uva sin ++ ans stream #include<stdio.h>#include<iostream>using namespace std;int main(){ int k,x,y,ans
UVa 514 Rails(棧的應用)
clu 題目 是否 一個 else uva 棧操作 for IV 題目鏈接: https://cn.vjudge.net/problem/UVA-514 1 /* 2 問題 3 輸入猜測出棧順序,如果可能輸出Yes,否則輸出No 4 5 解題思路 6 貌似沒
Rails UVA - 514 (棧的應用)
題目連線 最初看到這個題不是很明白題意,反覆理解了之後才明白。 也就是說,已知進棧的順序是從1~n,然後 給定一種出棧的順序,判斷這個出棧順序是否能夠成立。 比如n為3的時候 可能的出棧順序就是 3,2,1 (所有火車入棧之後再一輛輛出棧)或者 1,2,3 (這種是入一輛出一輛),也可能
Uva 514 Rails(棧應用)
Uva 514 Rails 題意: 1-n編號的車從A駛入車站然後出站到B 問能否按照你輸入的順序輸出 (進入中轉站Station可以暫時停在裡面 要滿足後進先出)簡單的棧應用 #inclu
Uva 514 Rails(簡單棧)
原題連結 /* Note: 題意: 有n節車廂(編號1~n),從A站駛入,經過中轉站C能不能按照所給順序target駛出中轉站 一開始輸入n代表n節車廂,然後輸入出站順序target[],如