Submission #238233

# Submission time Handle Problem Language Result Execution time Memory
238233 2020-06-10T09:59:23 Z Vimmer Retro (COCI17_retro) C++14
0 / 100
464 ms 446744 KB
#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>

#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-O3")
#pragma GCC optimize("Ofast")
//#pragma GCC optimize("fast-math")
//#pragma GCC optimize("no-stack-protector")

#define F first
#define S second
#define sz(x) int(x.size())
#define pb push_back
#define N 100001
#define M ll(1e9 + 7)
#define inf 1e9 + 1e9

using namespace std;
//using namespace __gnu_pbds;

typedef long double ld;
typedef long long ll;
typedef short int si;
typedef array <int, 2> a2;

//typedef tree <int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;


ll f[301][301][301], n, m, tp, i, j, len;

vector <char> ans;

string s[301];

vector <char> bst[301][301];

bool mk[301][301][301], mkr[301][301];

bool low(vector <char> &a, vector <char> &b)
{
    for (int i = 0; i < sz(a); i++)
    {
        if (a[i] == b[i]) continue;

        return a[i] == '(';
    }

    return 0;
}

priority_queue <array <int, 4> > qr;

void solve(int i, int j, int b, int len)
{
    if (mk[i][j][b]) return;

    mk[i][j][b] = 1;

    if (i == n - 1) return;

    if (s[i][j] == '(') {b--; len--; }

    if (s[i][j] == ')') {b++; len--; }

    for (int a = -1; a <= 1; a++)
    {
        int nb = b, nlen = len, jr = j + a;

        if (jr < 0 || jr == m || s[i + 1][jr] == '*') continue;

        if (nb == -1) continue;

        if (f[i + 1][jr][nb] == nlen) solve(i + 1, jr, nb, nlen);
    }

}
int main()
{
    //freopen("input.txt", "r", stdin); //freopen("output4.txt", "w", stdout);

    ios_base::sync_with_stdio(0); istream::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    cin >> n >> m;

    for (int i = 0; i < n; i++) cin >> s[i];

    int sx, sy;

    for (int i = 0; i < m; i++)
        if (s[n - 1][i] == 'M') {sx = n - 1; sy = i; break;}

    memset(f, -1, sizeof(f));

    f[sx][sy][0] = 0;

    ll I = -1, J, K = -1;

    for (int i = n - 1; i > 0; i--)
        for (int j = 0; j < m; j++)
          for (int st = 0; st <= n - i - 1; st++)
            {
                if (f[i][j][st] == -1 || s[i][j] == '*') continue;

                for (int a = -1; a <= 1; a++)
                    if (a + j >= 0 && a + j < m && (st != 0 || s[i - 1][j + a] != ')'))
                    {
                        ll nw = f[i][j][st], nk = st;

                        if (s[i - 1][j + a] == '(') {nw++; nk++;}

                        if (s[i - 1][j + a] == ')') {nw++; nk--;}

                        if (f[i - 1][j + a][nk] == -1 || f[i - 1][j + a][nk] < nw) f[i - 1][j + a][nk] = nw;
                    }
            }

    for (int i = 0; i < 301; i++)
        for (int j = 0; j < 301; j++)
            if (K < f[i][j][0]) {I = i; J = j; K = f[i][j][0];}

    for (int i = 0; i < 301; i++)
        for (int j = 0; j < 301; j++)
          if (f[i][j][0] == K) solve(i, j, 0, K);

    cout << K << endl;

    qr.push({1, 0, sx, sy});

    while (sz(qr) > 0)
    {
        tp = qr.top()[0], len = qr.top()[1], i = qr.top()[2], j = qr.top()[3];

        qr.pop();

        if (tp == 2) {len++; bst[i][j].pb('(');}

        if (tp == 0) {len++; bst[i][j].pb(')');}

        if (sz(bst[i][j]) == K)
        {
            if (sz(ans) == 0 || low(bst[i][j], ans)) ans = bst[i][j];

            continue;
        }

        int b = 0;

        for (auto it : bst[i][j])
            if (it == '(') b++;

        b = b + b - len;

        for (int a = -1; a <= 1; a++)
        {
            int jr = j + a, nlen = len, nb = b, tp = 1;

            if (jr < 0 || jr == m || s[i - 1][jr] == '*' || mkr[i - 1][jr]) continue;

            if (s[i - 1][jr] == '(') {tp = 2; nb++; nlen++;}

            if (s[i - 1][jr] == ')') {tp = 0; nb--; nlen++;}

            if (nb == -1) continue;

            if (f[i - 1][jr][nb] == nlen)
                {mkr[i - 1][jr] = 1; bst[i - 1][jr] = bst[i][j]; qr.push({tp, len, i - 1, jr}); }
        }
    }

    for (auto it : ans) cout << it;
}

Compilation message

retro.cpp: In function 'int main()':
retro.cpp:167:94: warning: narrowing conversion of 'len' from 'll {aka long long int}' to 'int' inside { } [-Wnarrowing]
                 {mkr[i - 1][jr] = 1; bst[i - 1][jr] = bst[i][j]; qr.push({tp, len, i - 1, jr}); }
                                                                                              ^
retro.cpp:167:86: warning: narrowing conversion of '(i - 1)' from 'll {aka long long int}' to 'int' inside { } [-Wnarrowing]
                 {mkr[i - 1][jr] = 1; bst[i - 1][jr] = bst[i][j]; qr.push({tp, len, i - 1, jr}); }
                                                                                    ~~^~~
retro.cpp:97:8: warning: variable 'I' set but not used [-Wunused-but-set-variable]
     ll I = -1, J, K = -1;
        ^
retro.cpp:97:16: warning: variable 'J' set but not used [-Wunused-but-set-variable]
     ll I = -1, J, K = -1;
                ^
retro.cpp:95:18: warning: 'sx' may be used uninitialized in this function [-Wmaybe-uninitialized]
     f[sx][sy][0] = 0;
     ~~~~~~~~~~~~~^~~
retro.cpp:95:18: warning: 'sy' may be used uninitialized in this function [-Wmaybe-uninitialized]
# Verdict Execution time Memory Grader output
1 Runtime error 377 ms 437404 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Runtime error 376 ms 437368 KB Execution killed with signal 11 (could be triggered by violating memory limits)
3 Runtime error 376 ms 437624 KB Execution killed with signal 11 (could be triggered by violating memory limits)
4 Runtime error 362 ms 437544 KB Execution killed with signal 11 (could be triggered by violating memory limits)
5 Runtime error 377 ms 437392 KB Execution killed with signal 11 (could be triggered by violating memory limits)
6 Runtime error 367 ms 438516 KB Execution killed with signal 11 (could be triggered by violating memory limits)
7 Runtime error 365 ms 438636 KB Execution killed with signal 11 (could be triggered by violating memory limits)
8 Runtime error 386 ms 438880 KB Execution killed with signal 11 (could be triggered by violating memory limits)
9 Runtime error 380 ms 439032 KB Execution killed with signal 11 (could be triggered by violating memory limits)
10 Runtime error 404 ms 438880 KB Execution killed with signal 11 (could be triggered by violating memory limits)
11 Runtime error 464 ms 444936 KB Execution killed with signal 11 (could be triggered by violating memory limits)
12 Runtime error 436 ms 441720 KB Execution killed with signal 11 (could be triggered by violating memory limits)
13 Runtime error 416 ms 446584 KB Execution killed with signal 11 (could be triggered by violating memory limits)
14 Runtime error 415 ms 441720 KB Execution killed with signal 11 (could be triggered by violating memory limits)
15 Runtime error 457 ms 446744 KB Execution killed with signal 11 (could be triggered by violating memory limits)
16 Runtime error 443 ms 444280 KB Execution killed with signal 11 (could be triggered by violating memory limits)
17 Runtime error 443 ms 446240 KB Execution killed with signal 11 (could be triggered by violating memory limits)
18 Runtime error 429 ms 441720 KB Execution killed with signal 11 (could be triggered by violating memory limits)
19 Runtime error 441 ms 441720 KB Execution killed with signal 11 (could be triggered by violating memory limits)
20 Runtime error 452 ms 446060 KB Execution killed with signal 11 (could be triggered by violating memory limits)