Submission #1258827

#TimeUsernameProblemLanguageResultExecution timeMemory
1258827kunzaZa183Sailing Race (CEOI12_race)C++20
40 / 100
49 ms5328 KiB
#include <bits/stdc++.h> using namespace std; const int mn = 500, vari = 5; int dp[mn][mn][vari] = {}; vector<vector<int>> vvi; int n, k; bool ok(int l, int r, int num) { if (l > r) r += n; if (num < l) num += n; return (l < num && num < r); } int recur(int a, int b, bool type) { if (dp[a][b][type] != -1) return dp[a][b][type]; int maxi = 0; if (type == 0) { for (auto to : vvi[a]) if (ok(a, b, to)) { maxi = max({maxi, 1 + recur(a, to, 1), 1 + recur(to, b, 0)}); } } else { for (auto to : vvi[b]) if (ok(a, b, to)) { maxi = max({maxi, 1 + recur(a, to, 1), 1 + recur(to, b, 0)}); } } return dp[a][b][type] = maxi; } int main() { cin >> n >> k; vvi.resize(n); for (int i = 0; i < n; i++) { while (1) { int x; cin >> x; if (x == 0) break; vvi[i].push_back(x - 1); } } if (k == 0) { // only use 2. 0 is from first number, 1 is from second number memset(dp, -1, sizeof dp); int maxi = 0, maxs = -1; for (int i = 0; i < n; i++) { for (auto a : vvi[i]) { if (1 + max(recur(a, i, 0), recur(i, a, 1)) > maxi) { maxi = 1 + max(recur(a, i, 0), recur(i, a, 1)); maxs = i; } } } cout << maxi << "\n" << maxs + 1 << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...