답안 #236124

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
236124 2020-05-31T08:59:29 Z ne4eHbKa Retro (COCI17_retro) C++17
12 / 100
500 ms 333820 KB
//{ <defines>
#include <bits/stdc++.h>
using namespace std;

//#pragma comment(linker, "/stack:200000000")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,-O3")

#define fr(i, n) for(int i = 0; i < n; ++i)
#define fo(n) fr(i, n)

#define re return
#define ef else if
#define ifn(x) if(!(x))
#define _  << ' ' <<

#define ft first
#define sd second
#define ve vector
#define pb push_back
#define eb emplace_back

#define sz(x) int((x).size())
#define bnd(x) x.begin(), x.end()
#define clr(x, y) memset((x), (y), sizeof (x))

typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef ve<int> vi;

inline ll time() {re chrono :: system_clock().now().time_since_epoch().count();}
mt19937 rnd(time());
mt19937_64 RND(time());

template<typename t> inline void umin(t &a, t b) {a = min(a, b);}
template<typename t> inline void umax(t &a, t b) {a = max(a, b);}

int md = 998244353;

inline int m_add(int&a, int b) {a += b; if(a < 0) a += md; if(a >= md) a -= md; re a;}
inline int m_sum(int a, int b) {a += b; if(a < 0) a += md; if(a >= md) a -= md; re a;}
inline int m_mul(int&a, int b) {re a = 1ll * a * b % md;}
inline int m_prod(int a, int b) {re 1ll * a * b % md;}

int m_bpow(ll A, ll b) {
    int a = A % md;
    ll ans = 1;
    for(ll p = 1ll << 63 - __builtin_clzll(b); p; p >>= 1) {
        (ans *= ans) %= md;
        if(p & b)
            (ans *= a) %= md;
    }
    re ans;
}

//const ld pi = arg(complex<ld>(-1, 0));
//const ld pi2 = pi + pi;
const int oo = 2e9;
const ll OO = 4e18;
//} </defines>
const int N = 305;

int f[N][N][N];
int pr[N][N][N];
int o[N][N][N];
string s[N];

int n, m;

string st(int i, int j, int b) {
    string u;
    if(i < 0 || s[i][j] == '*') re u;
    if(s[i][j] != '.' && s[i][j] != 'M') u += s[i][j];
    u += st(i - 1, pr[i][j][b], b + (s[i][j] == '(' ? +1 : s[i][j] == ')' ? -1 : 0));
    re u;
}

pair<int, int> c(int i, int j, int b) {
    if(j >= 0 && j < m && (i < 0 || s[i][j] == '*') && !b) re {0, 0};
    if(i < 0 || j < 0 || j >= m || b < 0 || b > i + 1 || s[i][j] == '*') re {-1, 0};
    int &ans = f[i][j][b], &p = pr[i][j][b], &op = o[i][j][b];
    if(ans < oo) re {ans, op};
    bool br = false;
    if(s[i][j] == ')') --b, br = true;
    if(s[i][j] == '(') ++b, br = true;
    ans = p = -1;
    for(int z = j - 1; z <= j + 1; ++z) {
        auto v = c(i - 1, z, b);
        if(~v.ft) {
            int u = v.ft + br;
            if(u > ans || u == ans && v.sd > op || v.sd == op && st(i - 1, z, b) < st(i - 1, p, b)) {
                ans = u;
                op = v.sd;
                p = z;
            }
        }
    }
    if(s[i][j] == '(') ++op;
    if(s[i][j] == ')') op = 0;
    re {ans, op};
}


void solve() {
    clr(f, 127);
    clr(pr, -1);
    clr(o, 0);
    cin >> n >> m;
    fo(n) cin >> s[i];
    int M {};
    for(int i = 0; i < m; ++i) if(s[n - 1][i] == 'M') M = i;
    int v = c(n - 1, M, 0).ft, b = 0;
    cout << v << endl << st(n - 1, M, 0) << endl;
}

int main() {
#ifdef _LOCAL
    freopen("in.txt", "r", stdin);
    int tests; cin >> tests;
    for(int test = 1; test <= tests; ++test) {
		cerr << "case #" << test << endl;
        solve();
        cerr << endl;
    }
#else
//    freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
    ios_base :: sync_with_stdio(0); cin.tie(0); cout.tie(0);
    solve();
#endif
    return 0;
}

Compilation message

retro.cpp: In function 'int m_bpow(ll, ll)':
retro.cpp:50:26: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
     for(ll p = 1ll << 63 - __builtin_clzll(b); p; p >>= 1) {
                       ~~~^~~~~~~~~~~~~~~~~~~~
retro.cpp: In function 'std::pair<int, int> c(int, int, int)':
retro.cpp:93:36: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
             if(u > ans || u == ans && v.sd > op || v.sd == op && st(i - 1, z, b) < st(i - 1, p, b)) {
                           ~~~~~~~~~^~~~~~~~~~~~
retro.cpp:93:63: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
             if(u > ans || u == ans && v.sd > op || v.sd == op && st(i - 1, z, b) < st(i - 1, p, b)) {
                                                    ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
retro.cpp: In function 'void solve()':
retro.cpp:114:32: warning: unused variable 'b' [-Wunused-variable]
     int v = c(n - 1, M, 0).ft, b = 0;
                                ^
# 결과 실행 시간 메모리 Grader output
1 Correct 191 ms 333516 KB Output is correct
2 Incorrect 181 ms 333432 KB Output isn't correct
3 Partially correct 185 ms 333480 KB Partially correct
4 Correct 172 ms 333560 KB Output is correct
5 Incorrect 170 ms 333560 KB Output isn't correct
6 Incorrect 213 ms 333560 KB Output isn't correct
7 Incorrect 218 ms 333572 KB Output isn't correct
8 Incorrect 246 ms 333568 KB Output isn't correct
9 Incorrect 327 ms 333576 KB Output isn't correct
10 Incorrect 327 ms 333664 KB Output isn't correct
11 Execution timed out 1106 ms 333820 KB Time limit exceeded
12 Execution timed out 1102 ms 333692 KB Time limit exceeded
13 Execution timed out 1117 ms 333688 KB Time limit exceeded
14 Execution timed out 1114 ms 333748 KB Time limit exceeded
15 Execution timed out 1114 ms 333664 KB Time limit exceeded
16 Execution timed out 1111 ms 333688 KB Time limit exceeded
17 Execution timed out 1107 ms 333560 KB Time limit exceeded
18 Execution timed out 1108 ms 333560 KB Time limit exceeded
19 Execution timed out 1108 ms 333688 KB Time limit exceeded
20 Execution timed out 1107 ms 333688 KB Time limit exceeded