zoukankan      html  css  js  c++  java
  • POJ 1068 (13.10.11)

    Parencodings
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 17713   Accepted: 10660

    Description

    Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two different ways:
    q By an integer sequence P = p1 p2...pn where pi is the number of left parentheses before the ith right parenthesis in S (P-sequence).
    q By an integer sequence W = w1 w2...wn where for each right parenthesis, say a in S, we associate an integer which is the number of right parentheses counting from the matched left parenthesis of a up to a. (W-sequence).

    Following is an example of the above encodings:
    	S		(((()()())))
    
    	P-sequence	    4 5 6666
    
    	W-sequence	    1 1 1456
    
    

    Write a program to convert P-sequence of a well-formed string to the W-sequence of the same string.

    Input

    The first line of the input contains a single integer t (1 <= t <= 10), the number of test cases, followed by the input data for each test case. The first line of each test case is an integer n (1 <= n <= 20), and the second line is the P-sequence of a well-formed string. It contains n positive integers, separated with blanks, representing the P-sequence.

    Output

    The output file consists of exactly t lines corresponding to test cases. For each test case, the output line should contain n integers describing the W-sequence of the string corresponding to its given P-sequence.

    Sample Input

    2
    6
    4 5 6 6 6 6
    9 
    4 6 6 6 6 8 9 9 9
    

    Sample Output

    1 1 1 4 5 6
    1 1 2 4 5 1 1 3 9


    题意: 给出字符串的表达式P, 得到另一种表达式W

    表达式P的规则是这样的: P1, P2, Pi...Pn, Pi表示的是, 第i个右括号左边有Pi个左括号

    表达式W的规则是这样的: W1, W2, Wi...Wn, Wi表示的是, 第i个右括号与其对应的左括号形成的一对括号中, 有几对括号, 包括自己本身;


    做法: 由P规则得出字符串, 再由该字符串从左至右逐个找右括号, 一对一对查, 查一对, 标记成"##", 以便下次查的时候不会重复, 以及可以得知这里已有一对括号, 便于统计


    AC代码:

    #include<stdio.h>
    
    int main() {
        int t;
        scanf("%d", &t);
        while(t--) {
            char str[50];
            int ans[50];
            int n, formal, now;
            scanf("%d", &n);
            n--;
            scanf("%d", &formal);
            int i, pos;
            for(pos = 0; pos < formal; pos++)
                str[pos] = '(';
            str[pos] = ')';
            while(n--) {
                scanf("%d", &now);
                int num;
                num = now - formal + pos + 1;
                for(i = pos+1; i < num; i++)
                    str[i] = '(';
                str[i] = ')';
                pos = i;
                formal = now;
            }
            int count;
            int tpos = 0;
            for(i = 0 ; i <= pos; i++) {
                count = 0;
                if(str[i] == ')') {
                    for(int j = i-1; j >= 0; j--) {
                        if(str[j] == '#')
                            count++;
                        if(str[j] == '(') {
                            str[j] = '#';
                            str[i] = '#';
                            break;
                        }
                    }
                    ans[tpos++] = (count / 2) + 1;
                }
            }
            for(int i = 0; i < tpos; i++) {
                if(i != tpos-1)
                    printf("%d ", ans[i]);
                else
                    printf("%d
    ", ans[i]);
            }
        }
        return 0;
    }
  • 相关阅读:
    Saltstack module apache 详解
    Saltstack module ip 详解
    Saltstack module iosconfig 详解
    Saltstack module introspect 详解
    Saltstack module inspector 详解
    Saltstack module ini 详解
    Saltstack module incron 详解
    Modbus 指令 RS485指令规则
    停车系统对接第三方在线支付平台(二)
    停车系统对接第三方在线支付平台
  • 原文地址:https://www.cnblogs.com/phisy/p/3363286.html
Copyright © 2011-2022 走看看