zoukankan      html  css  js  c++  java
  • hdu 1361 Parencodings 简单模拟

    Parencodings

    题意:

    由括号序列S可经P规则和W规则变形为P序列和W序列。

    p规则是:pi是第i个右括号左边的左括号的数;

    w规则是:wi是第i右括号与它匹配的左括号之间右括号的数(其中包括它本身)。

    题解:

    这题真的好简单,数据也小,算是一个增加了我信心的题吧。 1是左括号,2是右括号。

    代码:

    #include <vector>
    #include <cstdio>
    #include <string>
    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    const int INF=0x3f3f3f3f;
    typedef long long ll;
    #define PU puts("");
    #define PI(A) printf("%d
    ",A)
    #define SI(N) scanf("%d",&(N))
    #define SII(N,M) scanf("%d%d",&(N),&(M))
    #define cle(a,val) memset(a,(val),sizeof(a))
    #define rep(i,b) for(int i=0;i<(b);i++)
    #define Rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define reRep(i,a,b) for(int i=(a);i>=(b);i--)
    const double EPS= 1e-9 ;
    
    /*  /////////////////////////     C o d i n g  S p a c e     /////////////////////////  */
    
    const int MAXN= 20 + 9 ;
    int N;
    vector<int > vei;
    int main()
    {
        int T;
        SI(T);
        while(T--)
        {
            SI(N);
            int k=1;
            rep(i,N)
            {
                int x;
                SI(x);
                for (int j=k;j<=x;j++)
                {
                    vei.push_back(1);
                }
                vei.push_back(2);
                k=x+1;
            }
            vector<int > vere;
            int d=vei.size();
            for (int i=d-1;i>=0;i--)
            {
                if (vei[i]==2)
                {
                    int ans=0;
                    int cnt1=0,cnt2=0;
                    for (int u=i;u>=0;u--)
                    {
                        if (vei[u]==2)
                        {
                            cnt2++;
                            ans++;
                        }
                        else
                        {
                            cnt1++;
                        }
                        if (cnt1==cnt2) break;
                    }
                    vere.push_back(ans);
                }
            }
            for (int i=vere.size()-1;i>=0;i--) printf("%d%c",vere[i],i==0?'
    ':' ');
            vei.clear();
        }
        return 0;
    }
  • 相关阅读:
    oracle 查找或删除重复记录的语句
    多线程案例
    JAVA调用增删改的存储过程
    设计中最常用的CSS选择器
    ORACLE多表查询优化
    oracle存储过程的事务处理
    oracle函数调用存储过程
    oracle存储过程的基本语法
    java.lang.OutOfMemoryError: Java heap space解决方法
    文件操作工具类
  • 原文地址:https://www.cnblogs.com/s1124yy/p/5701604.html
Copyright © 2011-2022 走看看