답안 #236105

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
236105 2020-05-31T08:27:35 Z ne4eHbKa Retro (COCI17_retro) C++17
55 / 100
282 ms 222712 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];
string s[N];

int n, m;

pair<int, char> c(int i, int j, int b) {
    if(j >= 0 && j < m && (i < 0 || s[i][j] == '*') && !b) re {0, '#'};
    if(i < 0 || j < 0 || j >= m || b < 0 || b > i + 1 || s[i][j] == '*') re {-1, '!'};
    int &ans = f[i][j][b], &p = pr[i][j][b];
    if(ans < oo) re {ans, p};
    bool br = false;
    if(s[i][j] == ')') --b, br = true;
    if(s[i][j] == '(') ++b, br = true;
    ans = p = -1;
    char e = '!';
    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 == '(') {
                ans = u;
                e = v.sd;
                p = z;
            }
        }
    }
    if(s[i][j] == '(') e = '(';
    if(s[i][j] == ')') e = ')';
    re {ans, e};
}

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

void solve() {
    clr(f, 127);
    clr(pr, -1);
    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;
    ans(n - 1, M, 0);
    cout << 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, char> c(int, int, int)':
retro.cpp:85:36: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
             if(u > ans || u == ans && v.sd == '(') {
                           ~~~~~~~~~^~~~~~~~~~~~~~
retro.cpp: In function 'void solve()':
retro.cpp:110:32: warning: unused variable 'b' [-Wunused-variable]
     int v = c(n - 1, M, 0).ft, b = 0;
                                ^
# 결과 실행 시간 메모리 Grader output
1 Correct 114 ms 222456 KB Output is correct
2 Correct 116 ms 222432 KB Output is correct
3 Partially correct 116 ms 222456 KB Partially correct
4 Partially correct 119 ms 222456 KB Partially correct
5 Correct 114 ms 222456 KB Output is correct
6 Correct 117 ms 222444 KB Output is correct
7 Partially correct 121 ms 222456 KB Partially correct
8 Partially correct 118 ms 222456 KB Partially correct
9 Correct 120 ms 222456 KB Output is correct
10 Partially correct 119 ms 222456 KB Partially correct
11 Partially correct 233 ms 222584 KB Partially correct
12 Partially correct 210 ms 222584 KB Partially correct
13 Partially correct 176 ms 222584 KB Partially correct
14 Partially correct 166 ms 222456 KB Partially correct
15 Partially correct 264 ms 222584 KB Partially correct
16 Partially correct 229 ms 222584 KB Partially correct
17 Partially correct 241 ms 222584 KB Partially correct
18 Partially correct 225 ms 222584 KB Partially correct
19 Partially correct 282 ms 222584 KB Partially correct
20 Partially correct 247 ms 222712 KB Partially correct