답안 #648412

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
648412 2022-10-06T11:05:19 Z bebra Retro (COCI17_retro) C++17
0 / 100
236 ms 524288 KB
#pragma GCC optimize("O3")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("fast-math")
#include <bits/stdc++.h>
using namespace std;

#define dbg(x) cerr << #x << ": " << x << endl;

const short INF = 30000;
const int MAX_N = 300 + 1;
const int MAX_BALANCE = MAX_N / 2 + 1;
char grid[MAX_N][MAX_N];

struct State {
    short len;
    // 0 - open, 1 - close
    bitset<MAX_N> sequence;

    State(short _len = -INF) : len(_len) {}

    bool operator<(const State& other) const {
        if (len == other.len) {
            if (sequence == other.sequence) {
                return false;
            }
            int lowest_bit = (sequence ^ other.sequence)._Find_first();
            return sequence.test(lowest_bit);
        } else {
            return len < other.len;
        }
    }
};

State dp[MAX_N][MAX_N][MAX_BALANCE];


int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, m;
    cin >> n >> m;
    for (int i = 0; i < n; ++i) {
        string s;
        cin >> s;
        for (int j = 0; j < m; ++j) {
            grid[i][j] = s[j];
        }
    }
    const int max_balance = n / 2 + 1;
    // moves (if possible):
    // (i - 1; j - 1)
    // (i - 1; j)
    // (i - 1; j + 1)
    auto gen_moves = [&](int x, int y) -> vector<pair<int, int>> {
        vector<pair<int, int>> moves;
        if (y - 1 >= 0) {
            if (grid[x + 1][y - 1] != '*') {
                moves.emplace_back(x + 1, y - 1);
            }
        }
        if (y + 1 < m) {
            if (grid[x + 1][y + 1] != '*') {
                moves.emplace_back(x + 1, y + 1);
            }
        }
        if (grid[x + 1][y] != '*') {
            moves.emplace_back(x + 1, y);
        }
        return moves;
    };
    for (int j = 0; j < m; ++j) {
        if (grid[n - 1][j] == 'M') {
            dp[n - 1][j][0] = State(0);
        }
    }
    for (int i = n - 2; i >= 0; --i) {
        for (int j = 0; j < m; ++j) {
            auto moves = gen_moves(i, j);
            for (int k = 0; k < max_balance; ++k) {
                for (const auto& [prev_i, prev_j] : moves) {
                    State new_state;
                    if (grid[i][j] == '.' || grid[i][j] == '*') {
                        new_state = dp[prev_i][prev_j][k];
                    } else if (grid[i][j] == '(' && k != 0) {
                        new_state = dp[prev_i][prev_j][k - 1];
                        if (new_state.len == -INF) continue;
                        ++new_state.len;
                    } else if (grid[i][j] == ')' && k + 1 < max_balance) {
                        new_state = dp[prev_i][prev_j][k + 1];
                        if (new_state.len == -INF) continue;
                        new_state.sequence.set(new_state.len);
                        ++new_state.len;
                    }
                    dp[i][j][k] = max(dp[i][j][k], new_state);
                }
            }
        }
    }
    State max_state;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            if (i == 0 || grid[i][j] == '*') {
                max_state = max(max_state, dp[i][j][0]);
            }
        }
    }
    cout << max_state.len << '\n';
    for (int i = 0; i < max_state.len; ++i) {
        if (max_state.sequence.test(i)) {
            cout << ')';
        } else {
            cout << '(';
        }
    }
    cout << '\n';
    return 0;
}

# 결과 실행 시간 메모리 Grader output
1 Runtime error 236 ms 524288 KB Execution killed with signal 9
2 Runtime error 212 ms 524288 KB Execution killed with signal 9
3 Runtime error 211 ms 524288 KB Execution killed with signal 9
4 Runtime error 212 ms 524288 KB Execution killed with signal 9
5 Runtime error 213 ms 524288 KB Execution killed with signal 9
6 Runtime error 208 ms 524288 KB Execution killed with signal 9
7 Runtime error 230 ms 524288 KB Execution killed with signal 9
8 Runtime error 219 ms 524288 KB Execution killed with signal 9
9 Runtime error 211 ms 524288 KB Execution killed with signal 9
10 Runtime error 211 ms 524288 KB Execution killed with signal 9
11 Runtime error 204 ms 524288 KB Execution killed with signal 9
12 Runtime error 207 ms 524288 KB Execution killed with signal 9
13 Runtime error 232 ms 524288 KB Execution killed with signal 9
14 Runtime error 201 ms 524288 KB Execution killed with signal 9
15 Runtime error 207 ms 524288 KB Execution killed with signal 9
16 Runtime error 202 ms 524288 KB Execution killed with signal 9
17 Runtime error 210 ms 524288 KB Execution killed with signal 9
18 Runtime error 223 ms 524288 KB Execution killed with signal 9
19 Runtime error 229 ms 524288 KB Execution killed with signal 9
20 Runtime error 201 ms 524288 KB Execution killed with signal 9