失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > c语言列车调度 栈 算法:列车调度(Train)

c语言列车调度 栈 算法:列车调度(Train)

时间:2020-12-21 21:58:41

相关推荐

c语言列车调度 栈 算法:列车调度(Train)

限制

1 ≤ n ≤ 1,600,000

0 ≤ m ≤ 1,600,000

时间:2 sec

空间:256 MB

解题思路:

1、先将序列扫描到一个数组num。从1-n挨个进栈,如果进栈数i == num[j],i出栈。

2、i出栈以后,判断下一个数num[j++],这时要先判断stack[top]是否等于它。如果相等,栈顶值出线,j++,再判stack[top]是否等于num[j++] ……。

具体代码如下:

#include

//#include

#define N 1600001

int stack[N];

int num[N-1];

int out[2 * N];// 1-push;0-pop

int main()

{

int n, m;

scanf("%d %d", &n, &m);

for (int i = 0; i < n; i++)

scanf("%d", &num[i]);

int flag = 1;// 1-可行;0-no

int k = 0;// out的下标

int top = 0;// stack的下标

for (int i = 1,j = 0; i <= n && j < n; i++)

{

if (top < m) {

out[k++] = 1;

stack[top++] = i;

} else {

flag = 0;

break;

}

if (i == num[j]) {

j++;

stack[--top] = 0;

out[k++] = 0;

while (top > 0 && stack[top - 1] == num[j]) {

j++;

stack[--top] = 0;

out[k++] = 0;

}

}

}

if (flag == 0 || top != 0) printf("No\n");

else

{

for (k = 0; k < 2 * n; k++)

{

if (out[k] == 0) printf("pop\n");

else if (out[k] == 1) printf("push\n");

}

}

//system("pause");

return 0;

}

如果觉得《c语言列车调度 栈 算法:列车调度(Train)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。