zoukankan      html  css  js  c++  java
  • 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 }

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

  • 相关阅读:
    CRF++条件随机场
    list 函数
    转:Java Map 排序定义
    C#统计文本单词个数2
    转:求多边形的面积 算法几何
    C#统计单词词频
    C#动态数组ArrayList
    转:java写一个方法实现统计一条英文语句忠每个单词的个数
    C#统计文本单词的个数
    统计文本单词个数,并个数大小按序排列 C#
  • 原文地址:https://www.cnblogs.com/loveonepeople/p/3643856.html
Copyright © 2011-2022 走看看