1. 程式人生 > >鐵軌(UVa 514)

鐵軌(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-2Rails, 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 NecklaceUVA-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[],如