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



  • 相关阅读:
    [转] Java的打包apk, jar、war、ear包
    查看网络端口
    adb删除系统软件
    打开大文件的方法
    转载:Adb远程连接Android系统(通过网络使用ADB(Connect to android with wifi))
    网站后台语言(笔记)
    mysql和mysqli使用笔记
    Data Management Technology(5) -- Recovery
    Data Management Technology(4) -- 关系数据库理论
    Data Management Technology(3) -- SQL
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4086861.html
Copyright © 2011-2022 走看看