`
hellojyj
  • 浏览: 62096 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

HDU1022--火车进出站问题Ⅰ

    博客分类:
  • ACM
阅读更多

原题: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): 18882    Accepted Submission(s): 7099


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 a problem, there is only one railway where all the trains stop. So all the trains come in from one side and get out from the other side. For this problem, if train A gets into the railway first, and then train B gets into the railway before train A leaves, train A can't leave until train B leaves. The pictures below figure out the problem. Now the problem for you is, there are at most 9 trains in the station, all the trains has an ID(numbered from 1 to n), the trains get into the railway in an order O1, your task is to determine whether the trains can get out in an order O2.
 

 

Input

 

The input contains several test cases. Each test case consists of an integer, the number of trains, and two strings, the order of the trains come in:O1, and the order of the trains leave:O2. The input is terminated by the end of file. More details in the Sample Input.
 

 

Output

 

The output contains a string "No." if you can't exchange O2 to O1, or you should output a line contains "Yes.", and then output your way in exchanging the order(you should output "in" for a train getting into the railway, and "out" for a train getting out of the railway). Print a line contains "FINISH" after each test case. More details in the Sample Output.
 

 

Sample Input
3 123 321 3 123 312
 

 

Sample Output
Yes. in in in out out out FINISH No. FINISH
Hint
Hint
For the first Sample Input, we let train 1 get in, then train 2 and train 3. So now train 3 is at the top of the railway, so train 3 can leave first, then train 2 and train 1. In the second Sample input, we should let train 3 leave first, so we have to let train 1 get in, then train 2 and train 3. Now we can let train 3 leave. But after that we can't let train 1 leave before train 2, because train 2 is at the top of the railway at the moment. So we output "No.".
 



其实关于这道题呢,难度还比上解析四则运算。我这里给大家分享下解题过程。火车进出站问题一般都要涉及到栈结构。本质就是进入过程能否和出去过程匹配的问题。分别把进入过程和出去过程放在两个数组。然后对进入过程设置指针p1,出去过程设置指针p2,如果p1==0,那么p1指向的车厢进入栈,如果p!=0;询问下栈顶元素和p2指向的车厢是否相等,相等就用while() pop();p2++;一直到栈为空或者stack.top()!=p2指向的车厢;一直到p1指到超过了最末尾车厢;“in”和“out可以在每次对栈结构操作时(pop()=>out,push()=>in),存放在一个string类型的数组里卖,最后如果栈是空的表示能够按照给你的出战顺序实现,那么输出Yes.步骤呢只要按照格式输出数组中的所有元素就可以了。如果栈不是空的,那就不行就输出No.

 

代码如下:

#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main(){
    int count;
    while(cin>>count){
        char num1[9],num2[9];
        string op[100];
        stack<char> st;
        int j=0;
        int p=0;
        int cp=0;
        for(int i=0;i<count;i++){
            cin>>num1[i];
        }
        for(int i=0;i<count;i++){
            cin>>num2[i];
        }
        while(p<=count){
            if(!st.empty()){
                if(st.top()==num2[j]){
                    while(!st.empty()&&st.top()==num2[j]){
                        st.pop();
                        op[cp++]="out";
                        j++;
                    }
                    if(p==count){
                        break;
                    }

                }else{
                    st.push(num1[p++]);
                    op[cp++]="in";
                }
            }else{
                st.push(num1[p++]);
                op[cp++]="in";
            }
        }
        if(!st.empty()){
            cout<<"No."<<endl;
            cout<<"FINISH"<<endl;
        }else{
            cout<<"Yes."<<endl;
            for(int a=0;a<cp;a++){
                cout<<op[a]<<endl;
            }
            cout<<"FINISH"<<endl;
        }

    }
    return 0;
}

 

0
0
分享到:
评论

相关推荐

    ACM HDU 2000-2099 解题报告 杭电 ACM

    《ACM HDU 2000-2099 解题报告 杭电 ACM》是一份详尽的编程竞赛解题集,主要涵盖了杭电(Hangzhou Dianzi University)在线判题系统(HDU OJ)上的2000至2099号题目。这份解题报告是针对参与ACM/ICPC(国际大学生...

    HDU 1022 Train Problem I 附详细思路

    HDU 1022 Train Problem I 附详细思路

    HDU 2000-2099 解题报告

    《HDU 2000-2099 解题报告》是一份专注于ACM(国际大学生程序设计竞赛)题目的分析与解答的资源集合,由杭州电子科技大学的参赛者或教练团队精心编撰。这份解题报告以CHM(Microsoft帮助文档格式)呈现,包含了从...

    HDU acm-PPT课件

    模拟竞赛是提高实战能力的有效方式,通过参与在线判题平台(如HDU OJ)的练习,可以锻炼快速阅读题目、理解和解决问题的能力。同时,ACM竞赛强调团队协作,学习如何与队友有效沟通,分工合作,共同解决问题,也是...

    HDU 1010-2500解题报告

    HDU(杭州电子科技大学)在线判题系统是许多ACMer(编程竞赛爱好者)熟悉的一个平台,它提供了大量的算法题目供用户练习和挑战。这个压缩包文件包含的是从HDU题目ID1010到2500之间的部分解题报告,对于想要提升编程...

    HDU+2000-2099+解题报告

    这个压缩包文件“HDU 2000-2099 解题报告”显然包含了在这个题号范围内的一些问题、答案以及解题思路,对于学习算法和提升编程能力具有很高的价值。 在这个范围内,我们可以预见到涵盖的算法类型可能包括但不限于:...

    HDU+2000-2099+解题报告.zip

    《杭电OnlineJudge 2000-2099解题报告》是针对杭州电子科技大学(HDU)在线评测系统(OnlineJudge)中2000至2099题目的详细解答集锦,主要涵盖了算法分析、编程技巧以及问题解决策略等内容。这份解题报告以CHM...

    hdu2000-2014ac代码

    HDU(杭州电子科技大学)在线评测系统是许多程序员学习算法和编程技巧的平台,它提供了大量的编程题目供用户练习。"AC"代表"Accepted",意味着提交的代码已经被评测系统接受,成功通过了所有测试用例。这个压缩包中...

    HDU-EID-V2-核心板1

    在本话题中,我们关注的是一个名为"HDU-EID-V2-核心板1"的特定设计,它涉及到STM32的核心组件、接口、电源管理和调试配置。 首先,核心板设计中提到了F103和F207两个型号的STM32芯片。F103和F207属于STM32的不同...

    HDU-2000-2099.zip_hdu2000

    【标题】"HDU-2000-2099.zip_hdu2000" 是一个包含杭电(Hangzhou Dianzi University)ACM竞赛题目解题报告的压缩包,覆盖了编号从2000到2099的题目。这个资源对于学习算法、提高编程技巧以及准备ACM/ICPC(国际大学...

    hdu 2000 -2099 题集

    这些题目来自于杭州电子科技大学的在线评测系统HDU的题集,涵盖了从2000到2009的编号。这些题目旨在测试编程者的基本算法理解、数学计算能力以及问题解决技巧。以下是对这些题目中涉及知识点的详细解释: 1. **2000...

    HDU 2000-2099 解题报告.CHM

    解题报告|ACM|程序设计参考程序以及题目的分析

    hdu2000-2012(C++)答案

    最精准的答案(本人做对的题目拿上来给大家呈现)!不要忘记是C++编的

    HDU-2000-2099.rar_hdu

    这个名为"HDU-2000-2099.rar_hdu"的压缩包包含了该平台从2000到2099共100道题目的源代码。这些题目涵盖了初级到高级的各种算法,对于学习和提升编程技能非常有帮助。 首先,我们来看看这些题目可能涉及到的基础知识...

    ACM HDU 2000->2099 解题报告

    我去年暑假花了5天,把杭电ACM网站上2000到2099这100道题全AC了,又花了10来天精心写解题报告。 里面包括题目、解题思路、编程技巧以及参考源码。所有代码都是使用C/C++写的。 最近整理资料时无意间发现,打包...

    hdu1297.rar_SUM_hdu1297

    杭电acm1297 #include&lt;stdio.h&gt; #include&lt;string.h&gt; #define m 1002 int f[m][70]={{1,1},{1,1},{1,2},{1,4}} void add(int p[],int q[],int sum[]) { int i,len if(p[0]&lt;... }

    hdu1250高精度加法

    本题(hdu1250)主要考察的就是如何通过编程实现高精度加法,并解决一个特定的数学问题。 #### 题目解析 根据题目描述,该题目编号为HDU1250,其核心在于利用高精度加法解决问题。具体地,题目涉及到了斐波那契数列...

    hdu-OS-simple-shell,Linux_的_Shell_命令窗口_demo_版实现_shell-demo.zip

    hdu-OS-simple-shell,Linux_的_Shell_命令窗口_demo_版实现_shell-demo

    HDU-1535-.zip_多源点

    标题中的"HDU-1535-.zip_多源点"表明这是一个关于解决 ACM (国际大学生程序设计竞赛)问题的程序代码包,问题编号为 HDU 1535,且该问题涉及到多源点的最短路径计算。描述中提到的"求多源点到单终点的最短路(反向...

    hdu-online judge 若干博弈问题

    ### 博弈问题详解 #### 一、博弈问题概述与奇异局势分析 博弈问题是一种常见的算法问题,在这类问题中,通常涉及两个或更多的参与者通过一定的规则进行交互,目的是为了达到某种对自己有利的结果。本篇文章主要...

Global site tag (gtag.js) - Google Analytics