Submission #702195

#TimeUsernameProblemLanguageResultExecution timeMemory
702195JosiaSailing Race (CEOI12_race)C++17
0 / 100
519 ms16632 KiB
#include <bits/stdc++.h> #define int int64_t using namespace std; vector<vector<bool>> graphRev; int n; bool type; int DP[500][500][2][2]; void init() { for (int i=0; i<500; i++) { for (int j = 0; j<500; j++) { for (int k = 0; k<2; k++) { for (int l = 0; l<2; l++) { DP[i][j][k][l] = -1; } } } } } int dp(int l, int r, bool pos, bool start) { if (DP[l][r][pos][start] != -1) return DP[l][r][pos][start]; int res = 0; for (int v = (l+1)%n; v!=r; v=(v+1)%n) { if (!graphRev[pos?r:l][v]) continue; if (start) { // if (pos==0) { res = max(dp((l+n-1)%n, v, 1, 0)+1, res); res = max(dp(v, (r+1)%n, 0, 0)+1, res); // } // if (pos==1) { // res = max(dp((l+n-1)%n, v, 1, 0)+1, res); // res = max(dp(v, (r+1)%n, 0, 0)+1, res); // } continue; } // if (pos==0) { res = max(dp(l, v, 1, 0)+1, res); res = max(dp(v, r, 0, 0)+1, res); // } // if (pos==1) { // res = max(dp(l, v, 1, 0)+1, res); // res = max(dp(v, r, 0, 0)+1, res); // } } return DP[l][r][pos][start] = res; } signed main() { cin.tie(0); ios_base::sync_with_stdio(0); init(); cin >> n; cin >> type; graphRev.assign(n,vector<bool>(n, 0)); for (int i = 0; i<n; i++) { int x; cin >> x; while (x!=0) { graphRev[x-1][i]=1; // graphRev[i][x-1]=1; cin >> x; } } // for (auto i: graphRev) { // for (int j: i) cerr << j << " "; // cerr << "\n"; // } // cerr << "\n"; if (type == 0) { int res = 0; for (int i = 0; i<n; i++) { res = max(res, dp(i, i, 0, 1)); // cerr << "---------\n"; } cout << res << "\n"; return 0; } assert(0); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...