zoukankan      html  css  js  c++  java
  • POJ1068 Parencodings 模拟

    该题是一个模拟题,可能在理解题意上有所困难。

    第一个序列的意思为:a[i]表示第i个右括号的左边有多少个左括号

    第二个序列的意思为:b[i]表示第i个右括号跟与之匹配的左括号之间有多少左括号,包括与之匹配的左括号

    首先根据第一个序列将这个括号的序列进行恢复,然后再从右到左将第二个序列计算出来。

    代码如下:

    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    int s[100], N, seq[25], rec[25];
    // -1 代表左括号, 1代表右括号 
    
    int deal(int x)
    {
        int cnt = 0, Max = 0;
        for (int i = x; i >= 1; --i) {
            if (s[i] == -1) {
                --cnt;
                if (cnt == 0) {
                    return Max;
                }
            }
            else if (s[i] == 1) {
                ++cnt;
                ++Max;
            }
        }    
    }
    
    int main()
    {
        int T, pos;
        scanf("%d", &T);
        while (T--) {
            pos = 1;
            memset(s, 0, sizeof (s));
            scanf("%d", &N);
            for (int i = 1; i <= N; ++i) {
                scanf("%d", &seq[i]);
            }
            for (int i = 1; i <= N; ++i) { 
                int j;
                for (j = pos; j < pos + seq[i] - seq[i-1]; ++j) {
                    s[j] = -1;
                }
                s[j] = 1;
                pos = j + 1;
            } // 复原完毕
            for (int i = 2 * N, j = N; i >= 1; --i) {
                if (s[i] == 1) {
                    rec[j] = deal(i);
                    --j;
                }
            }
            for (int i = 1; i <= N; ++i) {
                printf(i == N ? "%d\n" : "%d ", rec[i]);
            }
        }    
        return 0;    
    }
  • 相关阅读:
    237.Delete Node in a Linked List
    235.Lowest Common Ancestor of a Binary Search Tree
    234.Palindrome Linked List
    232.Implement Queue using Stacks
    231.Power of Two
    226.Invert Binary Tree
    225.Implement Stack using Queues
    Vue概述
    Git分布式版本控制工具
    分布式RPC框架Apache Dubbo
  • 原文地址:https://www.cnblogs.com/Lyush/p/2570243.html
Copyright © 2011-2022 走看看