THU2015 fall 2-2 Train

来源:互联网 发布:tensorflow有趣的项目 编辑:程序博客网 时间:2024/04/30 10:40

THU2015 fall 2-2 Train


描述

某列车调度站的铁道联接结构如图所示。

其中,A为入口,B为出口,S为中转盲端。所有铁道均为单轨单向式:列车行驶的方向只能是从A到S,再从S到B;另外,不允许超车。因为车厢可在S中驻留,所以它们从B端驶出的次序,可能与从A端驶入的次序不同。不过S的容量有限,同时驻留的车厢不得超过m节

设某列车由编号依次为{1, 2, ..., n}的n节车厢组成。调度员希望知道,按照以上交通规则,这些车厢能否以(a1, a2, ..., an)的次序,重新排列后从B端驶出。

输入

共两行。

第一行为两个数n,m。

第二行为以空格分隔的n个数,表示待判断可行性的驶出序列(a1,a2,...,an)。

输出

仅一行。若驶出序列可行,则输出Yes;否则输出No。

输入样例1

5 21 2 3 5 4

输出样例1

Yes

输入样例2

5 53 1 2 4 5

输出样例2

No

限制

1 <= n <= 100,000,n为整数

0 <= m <= 100,000,m为整数

待判断的驶出序列保证为{1, 2, ..., n}的一个排列,

时间:1sec

空间:256MB

提示

一级提示

栈混洗


如代如下:

#include <stdio.h>const int SZ = 1 << 20;  //提升IO buff struct fastio{char inbuf[SZ];char outbuf[SZ];fastio(){setvbuf(stdin, inbuf, _IOFBF, SZ);setvbuf(stdout, outbuf, _IOFBF, SZ);}}io;#define N 1600001int stack[N];int num[N-1];int out[2 * N];// 1-push;0-popint 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-noint 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 printf("Yes\n");return 0;}



0 0
原创粉丝点击