Submission #96617

# Submission time Handle Problem Language Result Execution time Memory
96617 2019-02-10T13:08:08 Z josiftepe parentrises (BOI18_parentrises) C++14
61 / 100
208 ms 111408 KB
#include <bits/stdc++.h>

using namespace std;
int dp[305][305][305];
const int MOD = 1e9 + 7;
int rek(int at, int open, int closed){
    if(at == 0){
        if(closed == 0){
            return 1;
        }
        return 0;
    }
    if(dp[at][open][closed] != -1){
        return dp[at][open][closed];
    }
    int ret = 0;
    ret += rek(at - 1, open + 2, closed + 1);
    if(open > 0){
        ret += rek(at - 1, open - 1, max(closed - 2, 0));
    }
    return dp[at][open][closed] = ret % MOD;
}
void solve(string s){
    string ret = s;
    for(int i = 0; i < s.size(); i ++){
        ret[i] = '?';
    }
    stack<int> st;
    int cnt = 0;
    for(int i = 0; i < (int)s.size(); i ++){
        if(s[i] == '('){
            ++cnt;
            ret[i] = 'G';
        }
        else{
            if(cnt == 0){
                if(st.empty()) {
                    cout << "impossible\n";
                    return;
                }
                ret[st.top()] = 'R';
                ret[i] = 'B';
                st.pop();
            }
            else{
                cnt --;
                ret[i] = 'G';
                st.push(i);
            }
        }
    }
    stack<int> st2;
    cnt = 0;
    for(int i = (int)s.size() - 1; i >= 0; i --){
        if(s[i] == ')'){
            ++cnt;
        }
        else{
            if(cnt == 0){
                if(st.empty()) {
                    cout << "impossible\n";
                    return;
                }
                ret[st2.top()] = 'B';
                ret[i] = 'R';
                st2.pop();
            }
            else{
                cnt --;
                st2.push(i);
            }
        }

    }
    cout << ret << endl;

}
int main()
{
    ios_base::sync_with_stdio(false);
    int t_case;
    cin >> t_case;
    if(t_case == 1){
        int t;
        cin >> t;
        string s;
        while(t --){
            cin >> s;
            solve(s);
        }

    }
    else if(t_case == 2){
        int t;
        cin >> t;
        memset(dp, -1, sizeof dp);
        while(t --){
            int n;
            cin >> n;
            cout << rek(n, 0, 0) << endl;
        }
    }
    return 0;
}

Compilation message

parentrises.cpp: In function 'void solve(std::__cxx11::string)':
parentrises.cpp:25:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i < s.size(); i ++){
                    ~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 296 KB Output is correct
3 Runtime error 6 ms 504 KB Execution killed with signal 11 (could be triggered by violating memory limits)
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 404 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 404 KB Output is correct
6 Runtime error 5 ms 504 KB Execution killed with signal 11 (could be triggered by violating memory limits)
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 404 KB Output is correct
6 Runtime error 5 ms 504 KB Execution killed with signal 11 (could be triggered by violating memory limits)
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 83 ms 111352 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 83 ms 111352 KB Output is correct
2 Correct 78 ms 111408 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 83 ms 111352 KB Output is correct
2 Correct 78 ms 111408 KB Output is correct
3 Correct 208 ms 111364 KB Output is correct