Submission #236134

# Submission time Handle Problem Language Result Execution time Memory
236134 2020-05-31T09:12:27 Z kartel Retro (COCI17_retro) C++14
0 / 100
500 ms 524292 KB
#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
#define in(x) freopen(x, "r", stdin)
#define out(x) freopen(x, "w", stdout)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-O3")
#define F first
#define S second
#define pb push_back
#define N +100500
#define M ll(1e9 + 7)
#define sz(x) (int)x.size()
#define re return
#define oo ll(1e9)
#define el '\n'
#define pii pair <int, int>
using namespace std;
//using namespace __gnu_pbds;
//typedef tree <int, null_type, less_equal <int> , rb_tree_tag, tree_order_statistics_node_update> ordered_set;
typedef long long ll;
typedef long double ld;

int n, m, i, j, b, B, len, ans, I, J;
char c[305][305];

bool great(string a, string b)
{
    if (sz(a) < sz(b)) return 0;
    if (sz(a) > sz(b)) return 1;
    return (a < b);
}

int main()
{
    srand(time(0));
    ios_base::sync_with_stdio(0);
    iostream::sync_with_stdio(0);
    ios::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);

//    in("input.txt");
//    out("output.txt");

    cin >> n >> m;

    if (n * m * n * n > 1e9)
    {
        pair <int, int> f[n + 5][m + 5][n + 5];

        for (i = 1; i <= n; i++)
           for (j = 1; j <= m; j++)
             for (b = 0; b <= 300; b++)
                f[i][j][b].F = -1;

        for (i = 1; i <= n; i++)
          for (j = 1; j <= m; j++)
        {
            cin >> c[i][j];

            if (c[i][j] == 'M') f[i][j][0].F = 0;
        }


        for (i = n; i >= 2; i--)
        {
            for (j = 1; j <= m; j++)
                for (b = 0; b <= 300; b++)
            {
                if (f[i][j][b].F == -1) continue;

                if (j - 1 >= 1 && c[i - 1][j - 1] != '*')
                {
                    int B = b, len = f[i][j][b].F;

                    if (c[i - 1][j - 1] == '(') B++, len++; else
                    if (c[i - 1][j - 1] == ')') B--, len++;

                    if (B >= 0 && (f[i - 1][j - 1][B].F == -1 || f[i - 1][j - 1][B].F < len || (f[i - 1][j - 1][B].F == len && B - b == 1)))
                    {
    //                    cerr << len << " " << i - 1 << " " << j - 1 << " " << B << el;
                        f[i - 1][j - 1][B].F = len;
                        f[i - 1][j - 1][B].S = j;
                    }

                }

                if (j >= 1 && c[i - 1][j] != '*')
                {
                    int B = b, len = f[i][j][b].F;

                    if (c[i - 1][j] == '(') B++, len++; else
                    if (c[i - 1][j] == ')') B--, len++;

                    if (B >= 0 && (f[i - 1][j][B].F == -1 || f[i - 1][j][B].F < len || (f[i - 1][j][B].F == len && B - b == 1)))
                    {
    //                    cerr << len << " " << i - 1 << " " << j << " " << B << el;
                        f[i - 1][j][B].F = len;
                        f[i - 1][j][B].S = j;
                    }

                }

                if (j + 1 <= m && c[i - 1][j + 1] != '*')
                {
                    int B = b, len = f[i][j][b].F;

                    if (c[i - 1][j + 1] == '(') B++, len++; else
                    if (c[i - 1][j + 1] == ')') B--, len++;

                    if (B >= 0 && (f[i - 1][j + 1][B].F == -1 || f[i - 1][j + 1][B].F < len || (f[i - 1][j + 1][B].F == len && B - b == 1)))
                    {
    //                    cerr << len << " " << i - 1 << " " << j + 1 << " " << B << el;
                        f[i - 1][j + 1][B].F = len;
                        f[i - 1][j + 1][B].S = j;
                    }
                }
            }
        }

        for (i = 1; i <= n; i++)
        {
            for (j = 1; j <= m; j++)
            {
                if (i == 1 || c[i - 1][j] == '*' || (j - 1 >= 1 && c[i - 1][j - 1] == '*') || (j + 1 <= m && c[i - 1][j + 1] == '*'))
                {
                    if (ans < f[i][j][0].F)
                        ans = f[i][j][0].F, I = i, J = j;
                }
            }
        }

        string s = "";

        cout << ans << el;

        b = 0;

        while (I != n)
        {
            int nb = b;

            if (c[I][J] != '.')
            {
                if (c[I][J] == ')') nb++;
                               else nb--;
                s += c[I][J];
            }

            J = f[I][J][b].S;
            I++;

            b = nb;
        }

        reverse(s.begin(), s.end());

        cout << s;
    }
    else
    {
        string f[n + 5][m + 5][n + 5];
        for (i = 1; i <= n; i++)
           for (j = 1; j <= m; j++)
             for (b = 0; b <= 300; b++)
                f[i][j][b] = "";

        for (i = 1; i <= n; i++)
          for (j = 1; j <= m; j++)
        {
            cin >> c[i][j];
            if (c[i][j] == 'M') f[i][j][0] = "#";
        }


        for (i = n; i >= 2; i--)
        {
            for (j = 1; j <= m; j++)
                for (b = 0; b <= 300; b++)
            {
                if (f[i][j][b] == "") continue;

                if (j - 1 >= 1 && c[i - 1][j - 1] != '*')
                {
                    int B = b;
                    string x = f[i][j][b];

                    if (c[i - 1][j - 1] == '(') x += "(", B++; else
                    if (c[i - 1][j - 1] == ')') x += ")", B--;

                    if (B >= 0 && great(x, f[i - 1][j - 1][B]))
                    {
    //                    cerr << len << " " << i - 1 << " " << j - 1 << " " << B << el;
                        f[i - 1][j - 1][B] = len;
                    }

                }

                if (j >= 1 && c[i - 1][j] != '*')
                {
                    int B = b;

                    string x = f[i][j][b];

                    if (c[i - 1][j] == '(') x += "(", B++; else
                    if (c[i - 1][j] == ')') x += ")", B--;

                    if (B >= 0 && great(x, f[i - 1][j][B]))
                    {
    //                    cerr << len << " " << i - 1 << " " << j << " " << B << el;
                        f[i - 1][j][B] = x;
                    }

                }

                if (j + 1 <= m && c[i - 1][j + 1] != '*')
                {
                    int B = b;

                    string x = f[i][j][b];

                    if (c[i - 1][j + 1] == '(') x += "(", B++; else
                    if (c[i - 1][j + 1] == ')') x += ")", B--;

                    if (B >= 0 && great(x, f[i - 1][j + 1][B]))
                    {
    //                    cerr << len << " " << i - 1 << " " << j + 1 << " " << B << el;
                        f[i - 1][j + 1][B] = x;
                    }
                }
            }
        }
        string s = "";
        for (i = 1; i <= n; i++)
        {
            for (j = 1; j <= m; j++)
            {
                if (i == 1 || c[i - 1][j] == '*' || (j - 1 >= 1 && c[i - 1][j - 1] == '*') || (j + 1 <= m && c[i - 1][j + 1] == '*'))
                {
                    if (great(f[i][j][0], s))
                        s = f[i][j][0];
                }
            }
        }
        s.erase(0, 1);
        cout << sz(s) << el << s;
    }
 }

//
//110000
//1100
# Verdict Execution time Memory Grader output
1 Incorrect 5 ms 384 KB Output isn't correct
2 Incorrect 11 ms 640 KB Output isn't correct
3 Incorrect 9 ms 512 KB Output isn't correct
4 Incorrect 12 ms 768 KB Output isn't correct
5 Incorrect 19 ms 1664 KB Output isn't correct
6 Incorrect 277 ms 19192 KB Output isn't correct
7 Incorrect 242 ms 25976 KB Output isn't correct
8 Incorrect 163 ms 17784 KB Output isn't correct
9 Incorrect 364 ms 37880 KB Output isn't correct
10 Incorrect 417 ms 48744 KB Output isn't correct
11 Runtime error 231 ms 524288 KB Execution killed with signal 9 (could be triggered by violating memory limits)
12 Runtime error 244 ms 524292 KB Execution killed with signal 9 (could be triggered by violating memory limits)
13 Execution timed out 1068 ms 435680 KB Time limit exceeded
14 Execution timed out 850 ms 410872 KB Time limit exceeded
15 Runtime error 244 ms 524292 KB Execution killed with signal 9 (could be triggered by violating memory limits)
16 Runtime error 233 ms 524288 KB Execution killed with signal 9 (could be triggered by violating memory limits)
17 Runtime error 251 ms 524292 KB Execution killed with signal 9 (could be triggered by violating memory limits)
18 Runtime error 254 ms 524292 KB Execution killed with signal 9 (could be triggered by violating memory limits)
19 Runtime error 229 ms 524288 KB Execution killed with signal 9 (could be triggered by violating memory limits)
20 Runtime error 239 ms 524288 KB Execution killed with signal 9 (could be triggered by violating memory limits)