HDU 1022 Train Problem I 模拟栈题解

火车进站,模拟一个栈的操作,额外的栈操作,查看是否能按照规定顺序出栈。

数据量很少,故此题目很容易AC。

直接使用数组模拟就好。

#include <stdio.h>
const int MAX_N = 10;

char inOrder[MAX_N], outOrder[MAX_N], stk[MAX_N];
bool rs[MAX_N<<2];
int n;

int main()
{
	while (scanf("%d", &n) != EOF)
	{
		scanf("%s %s", inOrder, outOrder);

		int j = 0, out = 0, i = 0, st = 0;
		bool possible = true;
		while (possible && !(st == 0 && out == n))
		{
			for (; i < n && inOrder[i] != outOrder[out]; i++)
			{
				rs[j++] = true;
				stk[st++] = inOrder[i];
			}//push in
			i++;//Watch out: don't forget while inOrder[i]==outOrder[out]!
			rs[j++] = true;
			rs[j++] = false;
			out++;

			while (st > 0 && stk[st-1] == outOrder[out])
			{
				st--; out++;
				rs[j++] = false;
			}//pop back

			int k = 0;//check possible
			for (; k < st && stk[k] != outOrder[out]; k++);
			if (k < st) possible = false;
		}
		if (possible)
		{
			puts("Yes.");
			for (int i = 0; i < j; i++)
			{
				if (rs[i]) puts("in");
				else puts("out");
			}
		}
		else puts("No.");
		puts("FINISH");
	}
	return 0;
}

解法二:

#include <stdio.h>
const int MAX_N = 10;

char inOrder[MAX_N], outOrder[MAX_N], stk[MAX_N];
bool rs[MAX_N<<2];
int n;

int main()
{
	while (scanf("%d", &n) != EOF)
	{
		scanf("%s %s", inOrder, outOrder);

		int j = 0, out = 0, i = 0, st = 0;
		while (i<n && !(st == 0 && out == n))
		{
			for (; i < n && inOrder[i] != outOrder[out]; i++)
			{
				rs[j++] = true;
				stk[st++] = inOrder[i];
			}//push in
			i++;//Watch out: don't forget while inOrder[i]==outOrder[out]!
			rs[j++] = true;
			rs[j++] = false;
			out++;

			while (st > 0 && stk[st-1] == outOrder[out])
			{
				st--; out++;
				rs[j++] = false;
			}//pop back
		}
		if (st == 0 && out == n)
		{
			puts("Yes.");
			for (int i = 0; i < j; i++)
			{
				if (rs[i]) puts("in");
				else puts("out");
			}
		}
		else puts("No.");
		puts("FINISH");
	}
	return 0;
}

HDU 1022 Train Problem I 模拟栈题解

时间: 2024-12-20 13:33:48

HDU 1022 Train Problem I 模拟栈题解的相关文章

HDU 1022 Train Problem I(栈的操作规则)

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1022 Train Problem I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 45375    Accepted Submission(s): 16966 Problem Description As the new term come

HDU 1022 Train Problem I (STL 栈模拟)

Train Problem I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 30420    Accepted Submission(s): 11492 Problem Description As the new term comes, the Ignatius Train Station is very busy nowaday

hdu 1022 Train Problem I(栈的应用+STL)

Train Problem I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 20521    Accepted Submission(s): 7712 Problem Description As the new term comes, the Ignatius Train Station is very busy nowadays

HDU 1022.Train Problem I【栈的应用】【8月19】

Train Problem I Problem Description As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of student want to get back to school by train(because the trains in the Ignatius Train Station is the fastest all over the world ^v^).

HDU 1022 Train Problem I 用栈瞎搞

题目大意:有n辆火车,按一定的顺序进站(第一个字符串顺序),问是否能按规定的顺序出站(按第二个字符串的顺序出去),如果能输出每辆火车进出站的过程. 题目思路:栈的特点是先进后出,和题意类似,还有有一种情况是:开进来立马有开出去.并用vis[]数组的0,1标记进出站情况. 具体看代码 #include<cstdio> #include<cstring> #include<cmath> #include<queue> #include<algorithm&

hdu 1022 Train Problem I(栈)

#include<iostream> #include<vector> #include<cstring> #include<string> #include<stack> #include<map> using namespace std; int f[100005]; /* 栈的应用 若in[i]==out[j]则先进栈后立即出栈,此时只需i++,j++: 若in[i]!=out[j]检查栈首是否为out[j],若是,则出栈,并j

HDU 1022 Train Problem I (数据结构 —— 栈)

Problem Description As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of student want to get back to school by train(because the trains in the Ignatius Train Station is the fastest all over the world ^v^). But here comes

hdu 1022 Train Problem

Train Problem I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 30588    Accepted Submission(s): 11561 Problem Description As the new term comes, the Ignatius Train Station is very busy nowadays

hdu 1022 Train Problem I(stack)

用数组模拟栈 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; char str1[30],str2[30]; int sta[30]; int main() { int n; int i,j,k; int ans[100]; while(scanf("%d",&n)!=EOF) { scan