第一行输入一个整数
代表火车的数量。
第二行输入
个整数
代表火车的入站顺序。
输出若干行,每行输出
个整数,代表一种出站顺序。你需要按照字典序从小到大依次输出。
3 1 2 3
1 2 3 1 3 2 2 1 3 2 3 1 3 2 1
在这个样例中,每一种出栈顺序的详细出入站状况为(黑色普通字体代表入站、橙色加粗字体代表出站):
;
;
;
;
。
// 要出来/要进去都没了 - 完成 // 要出来的没了 - 必须进去 // 要进去的没了 - 必须出来 // 进去/出来 while(n = +readline()) { // const items = readline().split(' ').map(Number); const res = []; const stack = []; // 进站 let queue = []; // 待进站 queue = readline().split(' ').map(Number); // getNT(items).map(item => console.log(item.join(' '))); function operate(stack, queue, out, n) { if (out.length == n*2 - 1) { // 全出来了 res.push(out); } else if(queue.length && !stack.length) { // 没了 - 进入 const inItem = queue.slice(0, 1); // 进站 const addStack = [...stack, inItem]; const newQueue = queue.slice(1); // console.log('in', addStack, newQueue, out, n); operate(addStack, newQueue, out, n); } else if (!queue.length && stack.length) { // 没要进去的了 - 必须有出来的 const outItem = stack.slice(-1); // 出战 const addOut = out.length ? out + ' ' + outItem : outItem; const newStack = stack.slice(0, stack.length - 1); operate(newStack, queue, addOut, n); } else { // 可以先进去 || 可以先出来 const inItem = queue.slice(0, 1); // 进站 const addStack = [...stack, inItem]; const newQueue = queue.slice(1); operate(addStack, newQueue, out, n); const outItem = stack.slice(-1); // 出战 const addOut = out.length ? out + ' ' + outItem : outItem; const newStack = stack.slice(0, stack.length - 1); operate(newStack, queue, addOut, n); } } // console.log('111', stack, queue, [], n) operate(stack, queue, '', n); res.sort(); // console.log(res); res.map(item => console.log(item)) }
let n; while(n = readline()){ var trains = readline().split(" ") var max = [] var wuwu = function(num,list,arriving){ if(num<trains.length){ var list2 = list var arriving2 = arriving if(list.length>0){ wuwu(num,list.slice(0,list.length-1),arriving+list[list.length-1]) } wuwu(num+1,list+trains[num],arriving2) }else{ for(let i =list.length-1;i>=0;i--){ arriving += list[i] } max.push(parseInt(arriving)) } } wuwu(0,"","") max = max.sort(function(a,b){return a-b}) for(let i =0;i<max.length;i++){ let zf = max[i].toString().split("") let zz = "" for(let j=0;j<n;j++){ zz += zf[j] + " " } console.log(zz.slice(0,2*n-1)) } }