description
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)排序的操作序列a,c,c,b,a,d,d,b
當然,這樣的操作序列有可能有幾個,對於上例(1,3,2,4),a,c,c,b,a,d,d,b是另外乙個可行的操作序列。tom希望知道其中字典序最小的操作序列是什麼。
input
輸入有多組case,每個case第一行是乙個整數n(n<=1000)。
第二行有n個用空格隔開的正整數,構成乙個1~n的排列。
output
每組case輸出一行,如果輸入的排列不是「可雙棧排序排列」,輸出數字0;否則輸出字典序最小的操作序列,每兩個操作之間用空格隔開,行尾沒有空格。
sample input
copy sample input to clipboard
4 1 3 2 4
4 2 3 4 1
sample output
a b a a b b a b
0
// problem#: 19143
// submission#: 4809694
// the source code is licensed under creative commons attribution-noncommercial-sharealike 3.0 unported license
// uri:
#include
#include
#include
#include
#include
#define max 1000 + 1
using
namespace
std;
int input[max];
// the min num after each pos
int inputmin[max];
bool edge[max][max];
// 0 for initial, 1 for s1, 2 for s2
// (3 - color) for calculate the other color
int color[max];
stack
s1, s2;
bool isunable;
void initialize()
}isunable = false;
}void calmin(int size)
}void linkedge(int size) }}
}void dfs_dye(int pos, int _color, int size) else
if (color[i] == 0)}}
}void dye(int size)
}}void stacksort(int size)
int current = 1;
string s;
for (int i = 0; i < size; i++) else
while ((!s1.empty() && s1.top() == current) ||
(!s2.empty() && s2.top() == current)) else
current++;}}
for (int i = 0; i < s.size() - 1; i++) cout
<< s[i];
cout
<< endl;
}int main()
}return
0;}
雙棧排序練習
題目 請編寫乙個程式,按公升序對棧進行排序 即最大元素位於棧頂 要求最多只能使用乙個額外的棧存放臨時資料,但不得將元素複製到別的資料結構中。給定乙個int numbers c 中為vector 其中第乙個元素為棧頂,請返回排序後的棧。請注意這是乙個棧,意味著排序過程中你只能訪問到第乙個元素。解題思路...
nowcoder 雙棧排序
請編寫乙個程式,按公升序對棧進行排序 即最大元素位於棧頂 要求最多只能使用乙個額外的棧存放臨時資料,但不得將元素複製到別的資料結構中。給定乙個int numbers c 中為vector 其中第乙個元素為棧頂,請返回排序後的棧。請注意這是乙個棧,意味著排序過程中你只能訪問到第乙個元素。測試樣例 1,...
C 雙棧排序
請編寫乙個程式,按公升序對棧進行排序 即最大元素位於棧頂 要求最多只能使用乙個額外的棧存放臨時資料,但不得將元素複製到別的資料結構中。給定乙個int numbers c 中為vector 其中第乙個元素為棧頂,請返回排序後的棧。請注意這是乙個棧,意味著排序過程中你只能訪問到最後乙個元素。演算法 題目...