제출 #38890

#제출 시각아이디문제언어결과실행 시간메모리
38890aomeSailing Race (CEOI12_race)C++14
15 / 100
3000 ms6408 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 505;

int n;
int res, start;
bool subtask;
bool a[N][N];
int f[2][N][N];
int g[2][N][N];

int calF(bool t, int l, int r) {
    int &F = f[t][l][r];
    if (F != -1) return F;
    F = 0;
    if (t == 0) {
        for (int i = l; i != r; i = (i + 1) % n) {
            if (a[l][i]) F = max(F, calF(0, i, r) + 1);
        }
    }
    else {
        for (int i = l; i != r; i = (i + 1) % n) {
            if (a[r][i] && i != l) F = max(F, calF(1, l, i) + 1);
        }
    }
    return F;
}

int calG(bool t, int l, int r) {
    int &G = g[t][l][r];
    if (G != -1) return G;
    G = 0;
    if (t == 0) {
        for (int i = l; i != r; i = (i + 1) % n) {
            if (a[l][i]) G = max(G, max(calG(0, i, r), calG(1, l, i)) + 1);
        }
        if (res < G) {
            res = G, start = l;
        }
    }
    else {
        for (int i = l; i != r; i = (i + 1) % n) {
            if (a[r][i] && i != l) G = max(G, max(calG(1, l, i), calG(0, i, r)) + 1);
        }
        if (res < G) {
            res = G, start = r;
        }
    }
    return G;
}

int main() {
    // subtask 0
    ios::sync_with_stdio(false);
    cin >> n >> subtask;
    for (int i = 0; i < n; ++i) {
        int x;
        while (cin >> x && x) a[i][x - 1] = 1;
    }
    memset(f, -1, sizeof f);
    memset(g, -1, sizeof g);
    for (int i = 0; i < 2; ++i) {
        for (int j = 0; j < n; ++j) {
            for (int k = 0; k < n; ++k) {
                calF(i, j, k), calG(i, j, k);
            }
        }
    }
    cout << res << '\n' << start + 1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...