题解 | #火车进站#

火车进站

http://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static int sortSeq(const void *a, const void *b)
{
    return strcmp((char *)a, (char *)b);
}

static char g_stack[3][11] = {0}; /* 0,1,2 分别对应未入火车站的火车队列,在火车站中的火车队列,以及出栈后的火车队列 */
static char g_seq[5000][11] = {0};
static int g_num, g_kind = 0;
static void HandleSeq(char idx0, char idx1, char idx2, char in)
{
    if (in) { /* 不为 0 表示进入火车站 */
        if (idx0 >= g_num) return;
        g_stack[1][++idx1] = g_stack[0][idx0++];
        HandleSeq(idx0, idx1, idx2, 0);
        g_stack[1][idx1] = g_stack[0][idx0 - 1];
        HandleSeq(idx0, idx1, idx2, 1);
    } else { /* 当前最后入火车站的火车出战 */
        if (idx2 >= g_num) { strcpy(g_seq[g_kind++], g_stack[2]); return; }
        if (idx1 < 0) return;
        g_stack[2][idx2++] = g_stack[1][idx1--];
        HandleSeq(idx0, idx1, idx2, 0);
        HandleSeq(idx0, idx1, idx2, 1);
        g_stack[1][idx1 + 1] = g_stack[2][idx2 - 1];
    }
}

int main(int argc, char** argv)
{
    scanf("%d", &g_num);
    for (int i = 0; i < g_num; i++) scanf("%hhd", &g_stack[0][i]);
    HandleSeq(0, -1, 0, 1);
    qsort(g_seq, g_kind, sizeof(g_seq[0]), sortSeq);
    for (int i = 0; i < g_kind; i++) {for (int j = 0; j < g_num; j++) {printf("%d ", g_seq[i][j]);} printf("\n");}
    return 0;
}

全部评论

相关推荐

07-04 16:00
门头沟学院 Java
点赞 评论 收藏
分享
05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务