zoukankan      html  css  js  c++  java
  • POJ 1068 Parencodings

    1. 好久没碰到这种难度的题了:看题没思路,经过思考,推算,一次AC。以前的题要不太难,只能看解题报告,要不太简单,不用思考,这种难度的题正好适合我;

    2. 具体思路是通过P序列还原成括号序列,然后通过括号序列得到W序列的值。注意map[ p[ i ] + i]  = ‘)’。通过flag数组标记“)”之前的没有匹配的左括号;

    3. 这道题属于模拟题(以后知道题的类型就分个类);


    #include <iostream>
    #include <cstring>
    using namespace std;
    
    int main()
    {
        int i, j, k, tmp, t, n;
        int P, W[22], map[50], flag[50];//0=(           1=)
        cin >> t;
        while (t--)
        {
            cin >> n;
            memset(map, 0, sizeof(map));
            memset(flag, 0, sizeof(flag));
            for(i = 1; i <= n; i++)
            {
                cin >> P;
                map[P + i] = 1;
            }
            for(i = 1; i <= 2 * n; i++)
                if (map[i] == 0)
                    flag[i] = 1;
                else flag[i] = 2;
    
            for(i = 1, j = 1; i <= 2 * n; i++)
                if (map[i] == 1)
                {
                    tmp = 1;
                    for (k = i; k > 0; k--)
                    {
                        if (flag[k] == 0)
                        {
                            tmp++;
                            continue;
                        }
                        else if (flag[k] == 1)
                        {
                            W[j] = tmp;
                            flag[k] = 0;
                            j++;
                            break;
                        }
                    }
                }
            for (i = 1; i <= n; i++)
                cout << W[i] << ' ';
            cout << endl;
        }
        return 0;
    }
    


  • 相关阅读:
    Zabbix——1
    Hive 基础知识——01
    Vim快捷命令
    Shell——2
    Shell——6
    Shell——4
    Shell——3
    Shell——1
    Hive 安装和配置以及基本语法——02
    Shell——5
  • 原文地址:https://www.cnblogs.com/dollarzhaole/p/3188933.html
Copyright © 2011-2022 走看看