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;
    }
  • 相关阅读:
    POJ2635-The Embarrassed Cryptographer-大整数素因子
    poj2115-C Looooops -线性同余方程
    POJ1942-Paths On a Grid-组合数学
    poj1850-CODE-组合
    POJ1019-Number Sequence-数数。。
    CF-Contest339-614
    POJ3252-RoundNumbers-排列组合
    睡前小dp-poj3254-状压dp入门
    AC自动机-HDU3065-简单题
    python学习笔记 day32 实现网盘上传下载功能
  • 原文地址:https://www.cnblogs.com/rainydays/p/2858596.html
Copyright © 2011-2022 走看看