zoukankan      html  css  js  c++  java
  • HDU 1022 Train Problem I 模拟栈题解

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

    数据量非常少,故此题目非常easyAC。

    直接使用数组模拟就好。


    #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;
    }



  • 相关阅读:
    【C语言】中的版本规范(C89 C99等)
    【微机】计算机系统组成
    【微机】验证负数以补码存储程序 C语言
    katalon studio升级到6.3.3版本后如何生成测试报告
    使用Katalon Studio进行数据驱动测试的方法(转)
    katalon 参数化
    Katalon中的测试对象、用例和套件的命名规范
    转载kalaton故障处理
    Katalon Studio IE浏览器 不好用 无法录制
    Katalon Studio操作界面详细说明(转载)
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4086861.html
Copyright © 2011-2022 走看看