火车调度问题

oJ地址https://acm.sjtu.edu.cn/OnlineJudge/problem/1049(火狐浏览器)

1049. 火车调度

Description

有一条东西方向的铁路穿过小城A,小城A有一个火车调度站,示意图如下:

火车调度

现在有N列火车自东向西依次开过来了,按照到达的先后次序编号为0号到N-1号。 根据调度局的要求,小城A的调度站要改变这些列车驶离A城的顺序。 为了达到这一目的, 调度站在任意时刻可以执行以下三种操作之一:

  • 如果调度站还有剩余空间,则可以令下一列开来的火车进入调度站;
  • 如果调度站内有列车,则可以令调度站最前方的火车离开调度站并驶离A城;
  • 可以命令下一列开来的火车不经过调度站而直接驶离A城。

不过小城A的调度站实在太小了,只能容纳M列火车,请帮忙确认调度站能否完成任务。

例子

如果有4列火车开来,调度站可以容纳2列火车,调度局要求火车按照2、1、3、0的顺序驶离A城,则此任务可满足,一种可能的方案如下:

Step 1:火车0进入调度站;

Step 2:火车1进入调度站;

Step 3:火车2不经过调度站驶离A城;

Step 4:火车1从调度站驶离A城;

Step 5:火车3不经过调度站驶离A城;

Step 6:火车0从调度站驶离A城;

当然,你只需要回答是否可行,不需要列出一种可行方案。

Input Format

第一行是一个正整数T

,表示本测试数据有多少个独立的测试点。( T≤300

之后有T

个独立的测试点,每个测试点占两行。 第一行有两个数字N和M,分别表示开来的火车数量,以及调度站最多可容纳的火车数量,两个数字之间用一个空格隔开。 第二行有N个整数,他们都在0到N−1

之间,且不重复,用空格隔开,表示火车驶离A城的次序。

N

是正整数,且N≤1000;M是非负整数,且M≤1000。 M可能为0

(这也许说明调度站的工作人员罢工了,或者正在这个考场考试)。

Output Format

输出共T

行,每行对应一个测试点。如果能够调度,则回答YES,否则回答NO。 输出请注意大小写,每行行末直接回车,不要有其他字符。

Sample Input

2
4 2
2 1 3 0
5 2
2 4 3 1 0

Sample Output

YES
NO

Hint

对每个测试数据,仅当其内部每个测试点都回答正确才得分。 从概率上讲,如果你采取随机回答YES/NO的方式,你只有大约2−300

的概率骗到分,这大约相当于宇宙中质子数量的倒数。

提交此题


Powered by PHP Technologies | Contributors
Copyright © 2011-2018 ACM Class. All rights reserved.
0.0513 - render 0.0175 - instru - 2 queries - 0.0054 @ portal

解题思路:先将一列将火车进站,如果进站火车正好是第一个出站的,那就出站继续检查站中火车(直到站空或不是要出站的)

如果不是,将下一列进站,(重复以上全部操作,直到没有火车进站)

#include<stdio.h>
#define max 1006
typedef struct
{
	int data[max];
	int top;
}stack;////////////////进站火车
int  main()
{
	int t,m,n,i,a[max],car;
	stack s;
	scanf("%d",&t);
	while(t--)
	{
		int flag=0;
		s.top=-1;
		car=0;/////////////代表即将进站的火车序号0-n
		scanf("%d%d",&n,&m);
		for(i=0;i<n;i++)
			scanf("%d",a+i);////题目要求出站的顺序
		i=0;////////////////即将出站的火车的下标
		while(car<n)
		{
			if(s.top==m+1)/*一共m+1个空位,因为题目是可以直接通过的,而我的是必须进站再出,所以加一个位置*/
			{
			   flag=1;
			   break;
			}
			s.data[++s.top]=car++;//进站
			while(a[i]==s.data[s.top]&&s.top!=-1)// 判断站中火车是否即将出站
			{
			    s.top--;
				i++;
			}
		}
		if(s.top!=-1)
			flag=1;
	    if(flag)
			printf("NO\n");
		else
	        printf("YES\n");
	}
	return 0;
}




猜你喜欢

转载自blog.csdn.net/shenyulingyeye/article/details/81412868