每日一題 8月7日題目精講 雙棧排序

2021-10-23 19:32:09 字數 2652 閱讀 1192

時間限制:c/c++

1秒,其他語言2秒

空間限制:c/c++

131072k,其他語言262144k

64bit io format:

%lld

tom最近在研究乙個有趣的排序問題。如圖所示,通過2個棧s1和s2,tom希望借助以下4種操作實現將輸入序列公升序排序。

操作a:如果輸入序列不為空,將第乙個元素壓入棧s1

操作b:如果棧s1不為空,將s1棧頂元素彈出至輸出序列

操作c:如果輸入序列不為空,將第乙個元素壓入棧s2

操作d:如果棧s2不為空,將s2棧頂元素彈出至輸出序列

如果乙個1~n的排列p可以通過一系列操作使得輸出序列為1,2,…,(n-1),n,tom就稱p是乙個「可雙棧排序排列」。例如(1,3,2,4)就是乙個「可雙棧排序序列」,而(2,3,4,1)不是。下圖描述了乙個將(1,3,2,4)排序的操作序列:

當然,這樣的操作序列有可能有幾個,對於上例(1,3,2,4),是另外乙個可行的操作序列。tom希望知道其中字典序最小的操作序列是什麼。

輸入描述:

第一行是乙個整數n。

第二行有n個用空格隔開的正整數,構成乙個1~n的排列

輸出描述:

共一行,如果輸入的排列不是「可雙棧排序排列」,輸出數字0;否則輸出字典序最小的操作序列,每兩個操作之間用空格隔開,行尾沒有空格。

示例1輸入

複製

413

24

輸出

複製

a b a a b b a b
示例2

輸入複製

423

41

輸出

複製

0
示例3

輸入複製

323

1

輸出

複製

a c a b b d
備註:

30

%的資料滿足:n<=

1050

%的資料滿足:n<=

50100

%的資料滿足:n<=

1000

有四種操作,問如何操作可以實現將輸入序列公升序排序

四種操作分別是:

操作a:如果輸入序列不為空,將第乙個元素壓入棧s1

操作b:如果棧s1不為空,將s1棧頂元素彈出至輸出序列

操作c:如果輸入序列不為空,將第乙個元素壓入棧s2

操作d:如果棧s2不為空,將s2棧頂元素彈出至輸出序列

貌似二分圖可以做(不過我還沒看懂)

首先推出規律:

如果兩個數 i,j(i≤j)i,j(i≤j) 不能被放入同乙個棧中,當且僅當存在 k,k>jk,k>j, 且 q[k]現在有兩個棧,我們只需要將滿足這個條件的點各自歸到一邊,中間連一條線,用經典的染色法判斷是否為二分圖,若是則按照顏色入棧,

若不是則說明不能完成

#include

#include

#include

#include

#include

#include

#define maxn 1004

using

namespace std;

const

int inf=

19260817

;int n,num;

int color[maxn]

;int t[maxn]

;//要排序的元素的儲存

int s[maxn]

;//判斷兩個數字是否滿足規則

bool flag,e[maxn]

[maxn]

;void

paint

(int x,

int c)}}

void

make()

for(

int i=

1;i}for

(int i=

1;i<=n;i++)}

}void

work()

stack<

int> stack1,stack2;

int now=1;

for(

int i=

1;i<=n;i++

)else

while((

!stack1.

empty()

&& stack1.

top(

)==now)||(

!stack2.

empty()

&& stack2.

top(

)==now)

)else}}

}int

main()

make()

;work()

;return0;

}

每日一題 4月7日題目精講 樹

樹 時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k 其他語言262144k 64bit io format lld 題目描述 shy有一顆樹,樹有n個結點。有k種不同顏色的染料給樹染色。乙個染色方案是合法的,當且僅當對於所有相同顏色的點對 x,y x到y的路徑上的所有點的顏色...

每日一題 4月8日題目精講 黑白樹

試題鏈結 時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 題目描述 一棵n個點的有根樹,1號點為根,相鄰的兩個節點之間的距離為1。樹上每個節點i對應乙個值k i 每個點都有乙個顏色,初始的時候所有點都是白色的。你需要...

每日一題 7月1日題目精講 借教室

時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 在大學期間,經常需要租借教室。大到院系舉辦活動,小到學習小組自習討論,都需要向學校申請借教室。教室的大小功能不同,借教室人的身份不同,借教室的手續也不一樣。面對海量...