zoukankan      html  css  js  c++  java
  • poj2567

    模拟

    View Code
    #include <iostream>
    #include <string>
    using namespace std;
    
    const    int    maxn=59;
    
    char    st[1000];
    int        vertex[maxn][maxn],mark[maxn],marknum,vertexnum[maxn],stl[maxn*3],stlnum;
    
    void init()
    {
        memset(vertex,0,sizeof(vertex));
        memset(mark,0,sizeof(mark));
        memset(vertexnum,0,sizeof(vertexnum));
        marknum=0;
        stlnum=0;
    }
    
    void del(int x,int y)
    {
        for (int i=1;i<=vertexnum[x];i++)
            if (vertex[x][i]==y)
            {
                vertex[x][i]=vertex[x][vertexnum[x]];
                vertexnum[x]--;
                return;
            }
    }
    
    void make()
    {
        int        len=strlen(st),i,temp=0;
        bool    did=true;
    
        for (i=0;i<=len-1;i++)
            if(st[i]==')')
            {
                if (!did)
                {
                    stl[++stlnum]=temp;
                    temp=0;
                    did=true;
                }
                stl[++stlnum]=-1;
            }
            else if (st[i]=='(')
            {
                if (!did)
                {
                    stl[++stlnum]=temp;
                    temp=0;
                    did=true;
                }
            }
            else if (st[i]>='0'&&st[i]<='9')
            {
                temp=temp*10+st[i]-48;
                did=false;
            }
    }
    
    void work()
    {
        int        i=0,stack[maxn],min,j,stacknum=0;
    
        make();
        stacknum++;
        stack[1]=stl[1];
        marknum=1;
        mark[1]=stack[1];
        for (i=2;i<=stlnum;i++)
        {
            if (stl[i]==-1)
                stacknum--;
            else
            {            
                    stack[++stacknum]=stl[i];
                    vertex[stack[stacknum]][++vertexnum[stack[stacknum]]]=stack[stacknum-1];
                    vertex[stack[stacknum-1]][++vertexnum[stack[stacknum-1]]]=stack[stacknum];
                    mark[++marknum]=stl[i];
            }
        }
        for (i=1;i<marknum;i++)
        {
            min=-1;
            for (j=1;j<=marknum;j++)
                if ((vertexnum[mark[j]]==1)&&(min==-1||min>mark[j]))
                    min=mark[j];
            if (i!=1)
                cout<<" ";
            cout<<vertex[min][1];
            del(vertex[min][1],min);
            vertexnum[min]=0;
        }
        cout<<endl;
    }
    
    int main()
    {
    //    freopen("t.txt","r",stdin);
        while (gets(st))
        {
            init();
            work();
        }
        return 0;
    }
  • 相关阅读:
    python的基本数据类型
    python数据基本运算处理===循环
    多态、多态性和鸭子类型
    菱形问题、类的组合
    类的继承
    面向对象基础
    软件开发三层架构
    logging模块
    json与pickle模块
    Webbrowser模拟百度一下子点击事件
  • 原文地址:https://www.cnblogs.com/rainydays/p/2858596.html
Copyright © 2011-2022 走看看