• Parencodings


    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1361

    题目大意 

    翻译:S = s1 s2…s2n是结构正确的(有左括号和右括号组成,并且数量相等,并且对应关系正确)小括号序列,他可以使用两种方式编码:

    正整数序列P = p1 p2…pn,pi表示第i个右括号之前的左括号的数量(P序列);

    正整数序列W = w1 w2…wn,wi表示第i个右括号对应的左括号的位置(从右向左数,1,2,3)(w序列)。

    题目要求根据p序列求出w序列。

    解题思路  

    对于p序列中的每个元素pi:

    循环判断之前的左括号,对于遇到的每个左括号:

    判断是否已经与其他右括号配对,如果已经配对,继续向左判断;

    如果没有,则记录它是第几个左括号。

    以4 5 6 6 6 6为例分析,首先创建数组a表示左括号,1表示没有配对的左括号,0表示已经配对的左括号。初始情况a的值为1 1 1 1 1 1

    读取p序列中的信息

    P1=4 从a[3]开始判断左括号,a[3]=1,所以与a[3]括号对应,所以w1=1,a的值1 1 1 0 1 1

    P2=5 从a[4]开始判断左括号,a[4]=1,所以与a[4]括号对应,所以w2=1,a的值1 1 1 0 0 1

    P3=6 从a[5]开始判断左括号,a[5]=1,所以与a[5]括号对应,所以w3=1,a的值1 1 1 0 0 0

    P4=6 从a[5]开始判断左括号,a[5]=0,a[4]=0,a[3]=0,a[2]=1,所以与a[2]括号对应,所以w4=4,a的值1 1 0 0 0 0

    同理得到w5=5 w6=6

    最后的w序列为:111456

    解题代码

     1 #include<iostream>
     2 using namespace std;
     3 int main()
     4 {
     5     int N;
     6     cin>>N;
     7     while(N--)
     8     {
     9         int n,a[25],b[25];
    10         cin>>n;
    11         memset(a,0,sizeof(a));
    12         for(int i=0;i<n;i++)
    13         {
    14             cin>>b[i];
    15             int k=0;
    16             for(int j=b[i];j>=0;j--)
    17             {
    18                 k++;
    19                 if(a[j]==0)
    20                 {
    21                     if(i<n-1)
    22                         cout<<k<<" ";
    23                     else
    24                         cout<<k;
    25                     a[j]=1;
    26                     break;
    27                 }
    28 
    29             }
    30             //cout<<k<<" ";
    31         }
    32         //if(N)
    33             cout<<endl;
    34     }
    35     return 0;
    36 }

    啦啦啦,又做一题,为什么是又呢?

  • 相关阅读:
    Codevs 2296 仪仗队 2008年省队选拔赛山东
    Codevs 1535 封锁阳光大学
    Codevs 1069 关押罪犯 2010年NOIP全国联赛提高组
    Codevs 1218 疫情控制 2012年NOIP全国联赛提高组
    Codevs 1684 垃圾陷阱
    洛谷 P1108 低价购买
    Vijos P1325桐桐的糖果计划
    Codevs 3289 花匠 2013年NOIP全国联赛提高组
    Codevs 2611 观光旅游(floyed最小环)
    C语言基础之彩色版C语言(内含linux)
  • 原文地址:https://www.cnblogs.com/loveonepeople/p/3643856.html
Copyright © 2020-2023  润新知