zoukankan      html  css  js  c++  java
  • Codeforce-Ozon Tech Challenge 2020-B. Kuroni and Simple Strings(贪心)

    B. Kuroni and Simple Strings
    time limit per test1 second
    memory limit per test256 megabytes
    inputstandard input
    outputstandard output
    Now that Kuroni has reached 10 years old, he is a big boy and doesn’t like arrays of integers as presents anymore. This year he wants a Bracket sequence as a Birthday present. More specifically, he wants a bracket sequence so complex that no matter how hard he tries, he will not be able to remove a simple subsequence!

    We say that a string formed by n characters ‘(’ or ‘)’ is simple if its length n is even and positive, its first n2 characters are ‘(’, and its last n2 characters are ‘)’. For example, the strings () and (()) are simple, while the strings )( and ()() are not simple.

    Kuroni will be given a string formed by characters ‘(’ and ‘)’ (the given string is not necessarily simple). An operation consists of choosing a subsequence of the characters of the string that forms a simple string and removing all the characters of this subsequence from the string. Note that this subsequence doesn’t have to be continuous. For example, he can apply the operation to the string ‘)()(()))’, to choose a subsequence of bold characters, as it forms a simple string ‘(())’, delete these bold characters from the string and to get ‘))()’.

    Kuroni has to perform the minimum possible number of operations on the string, in such a way that no more operations can be performed on the remaining string. The resulting string does not have to be empty.

    Since the given string is too large, Kuroni is unable to figure out how to minimize the number of operations. Can you help him do it instead?

    A sequence of characters a is a subsequence of a string b if a can be obtained from b by deletion of several (possibly, zero or all) characters.

    Input
    The only line of input contains a string s (1≤|s|≤1000) formed by characters ‘(’ and ‘)’, where |s| is the length of s.

    Output
    In the first line, print an integer k — the minimum number of operations you have to apply. Then, print 2k lines describing the operations in the following format:

    For each operation, print a line containing an integer m — the number of characters in the subsequence you will remove.

    Then, print a line containing m integers 1≤a1<a2<⋯<am — the indices of the characters you will remove. All integers must be less than or equal to the length of the current string, and the corresponding subsequence must form a simple string.

    If there are multiple valid sequences of operations with the smallest k, you may print any of them.

    Examples
    inputCopy
    (()((
    outputCopy
    1
    2
    1 3
    inputCopy
    )(
    outputCopy
    0
    inputCopy
    (()())
    outputCopy
    1
    4
    1 2 5 6
    Note
    In the first sample, the string is ‘(()((’. The operation described corresponds to deleting the bolded subsequence. The resulting string is ‘(((’, and no more operations can be performed on it. Another valid answer is choosing indices 2 and 3, which results in the same final string.

    In the second sample, it is already impossible to perform any operations.

    把所有左右能匹配的都去掉,剩下的一定不能匹配。

    #include <bits/stdc++.h>
    using namespace std;
    template <typename t>
    void read(t &x)
    {
        char ch = getchar();
        x = 0;
        t f = 1;
        while (ch < '0' || ch > '9')
            f = (ch == '-' ? -1 : f), ch = getchar();
        while (ch >= '0' && ch <= '9')
            x = x * 10 + ch - '0', ch = getchar();
        x *= f;
    }
     
    #define wi(n) printf("%d ", n)
    #define wl(n) printf("%lld ", n)
    #define rep(m, n, i) for (int i = m; i < n; ++i)
    #define rrep(m, n, i) for (int i = m; i > n; --i)
    #define P puts(" ")
    typedef long long ll;
    #define MOD 1000000007
    #define mp(a, b) make_pair(a, b)
    #define N 10005
    #define fil(a, n) rep(0, n, i) read(a[i])
    //---------------https://lunatic.blog.csdn.net/-------------------//
    vector<int> Q;
    int main()
    {
        string s;
        cin >> s;
        int n = s.size();
        int l = 0, r = n - 1;
        while (l < r)
        {
            while (l < n && s[l] != '(')
                l++;
            while (r >= 0 && s[r] != ')')
                r--;
            if (r <= l)
                break;
            else
            {
                Q.push_back(l + 1);
                Q.push_back(r + 1);
            }
            l++, r--;
        }
        if (Q.size() == 0)
        {
            puts("0");
            return 0;
        }
        sort(Q.begin(), Q.end());
     
        puts("1");
        wi(Q.size()), P;
        for (auto a : Q)
            wi(a);
    }
    
  • 相关阅读:
    python 线程Queue 用法代码展示
    Python中的join()函数的用法
    python 中爬虫 content和text的区别
    免费代理ip爬虫分享
    django数据库的表已迁移的不能重新迁移的解决办法
    RuntimeError: Model class app_anme.models.User doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.---python学习错误记录
    MYSQL查询操作 详细
    mysql数据库的基本操作命令总结
    http短连接与长连接简介
    浅谈http协议
  • 原文地址:https://www.cnblogs.com/lunatic-talent/p/12798379.html
Copyright © 2011-2022 走看看