【HDU】 1022 Train Problem I

来源:互联网 发布:c语言中与的符号 编辑:程序博客网 时间:2024/05/21 06:56

Train Problem I


  • 题目链接
    Train Problem I

  • 题目大意

就是有一个栈,给定一个初始序列和一个最终序列,求初始序列能否通过一种进栈出栈的方式打到最终序列。


  • 题解

就是一个暴搜的问题…数据很小。
用栈的时候需要小心一点不要丢失数据。


  • 代码(有些冗长)
#include <iostream>#include <cstdio>#include <cstring>using namespace std;int n,hs,ho,ha,way[30],flag;char a[15],s[15],out[15],ans[15];void dfs(int d){    if (d==2*n)    {        int f=0;        for (int i=0;i<n;i++) if (out[i]!=ans[i]) f=1;        if (!f)        {            flag=1;            printf("Yes.\n");            for (int i=0;i<2*n;i++) if (way[i]==1) printf("in\n");            else if (way[i]==-1) printf("out\n");        }        return ;    }    if (ha<n)    {        //in        way[d]=1;        s[hs++]=a[ha]; ha++;        dfs(d+1);        if (flag) return ;        s[--hs]='\0'; ha--;        way[d]=0;    }    if (hs>0)    {        //out        char c;        way[d]=-1;        c=s[--hs]; s[hs]='\0';        out[ho++]=c;        dfs(d+1);        if (flag) return ;        out[--ho]='\0'; s[hs++]=c;        way[d]=0;    }}int main(){    while (scanf("%d",&n)!=EOF)    {        memset(a,0,sizeof(a));        memset(ans,0,sizeof(ans));        memset(s,0,sizeof(s));        memset(out,0,sizeof(out));        flag=0;        scanf("%s%s",a,ans);        ha=0; hs=0; ho=0;        dfs(0);        if (!flag) printf("No.\n");        printf("FINISH\n");    }    return 0;}
0 0
原创粉丝点击