제출 #222254

#제출 시각아이디문제언어결과실행 시간메모리
222254dolphingarlicSailing Race (CEOI12_race)C++14
0 / 100
161 ms2816 KiB
#include <bits/stdc++.h> #define FOR(i, x, y) for (int i = x; i < y; i++) typedef long long ll; using namespace std; vector<int> graph[501]; int dp[501][501][2]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, t; cin >> n >> t; FOR(i, 0, n) { int v; cin >> v; while (v) { graph[i].push_back(v - 1); cin >> v; } } FOR(k, 0, n) { FOR(i, 0, n) { int j = (i + k) % n; for (int v : graph[i]) { if ((v > i && v <= i + k) || (v > i - n && v <= i + k - n)) { dp[i][j][0] = max(dp[i][j][0], max(dp[v][j][0], dp[i][v][1]) + 1); } } for (int v : graph[(i + k) % n]) { if ((v >= i && v < i + k) || (v >= i - n && v < i + k - n)) { dp[i][j][1] = max(dp[i][j][1], max(dp[v][j][0], dp[i][j][1]) + 1); } } } } if (t) { } else { int ans = 0, best = -1; FOR(k, 0, n + 1) FOR(i, 0, n) { if (dp[i][(i + k) % n][0] > ans) ans = dp[i][(i + k) % n][0], best = i; if (dp[i][(i + k) % n][1] > ans) ans = dp[i][(i + k) % n][1], best = (i + k) % n; } cout << ans << '\n' << best + 1; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...