HDU 1022 Train Problem I 栈

来源:互联网 发布:linux虚拟机挂载光盘 编辑:程序博客网 时间:2024/04/29 02:23

    这题......一看图就能看出来用啥做了啊啊= =这个图是多么经典的讲栈的图......好吧,先看下题,输入火车进入的顺序,问出去的顺序是否可以达成............好吧,头文件默默打上<stack>开始做题吧= =

    不过这题不只是要判断状态,还要把火车变成这个状态的步骤记录下来,一开始写的时候忽略了判断状态这点......结果写完步骤才发现得先判断,好吧,于是我“巧妙”的复制粘贴了一下╮(╯_╰)╭,代码行数瞬间变成两倍了,虽然有些繁琐,不过A了就好~

    下面AC代码:

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<stack>using namespace std;char a[10005];char target[10005];stack<char>track;int main(){    int n;    char t;    int i,j;    while(scanf("%d",&n)!=EOF)    {        while(!track.empty())        {            track.pop();        }        scanf("%s",a);        scanf("%s",target);        j=0;        for(i=0;i<n;i++)        {            track.push(a[i]);            if(a[i]==target[j])            {                j++;                track.pop();                if(!track.empty())                    t=track.top();                while(!track.empty())                {                    if(t==target[j])                    {                        j++;                        track.pop();                        if(!track.empty())                            t=track.top();                    }                    else                        break;                }            }        }        if(!track.empty())            cout<<"No."<<endl<<"FINISH"<<endl;        else        {            cout<<"Yes."<<endl;            j=0;            for(i=0;i<n;i++)            {                cout<<"in"<<endl;                track.push(a[i]);                if(a[i]==target[j])                {                    cout<<"out"<<endl;                    j++;                    track.pop();                    if(!track.empty())                        t=track.top();                    while(!track.empty())                    {                        if(t==target[j])                        {                            cout<<"out"<<endl;                            j++;                            track.pop();                            if(!track.empty())                                t=track.top();                        }                        else                            break;                    }                }            }            cout<<"FINISH"<<endl;        }    }    return 0;}


0 0
原创粉丝点击