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



  • 相关阅读:
    Python:如何显示进度条
    Python:常用函数封装
    Javascript:常用函数封装
    Javascript:alert(1)可以这样写以绕过filter
    SQL注入备忘单
    Web渗透:PHP字符编码绕过漏洞总结
    SQLi Lab的视频教程和文字教程
    Python:使用基于事件驱动的SAX解析XML
    Python:渗透测试开源项目【源码值得精读】
    Python:SQLMap源码精读—start函数
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4086861.html
Copyright © 2011-2022 走看看