Submission #1296737

#TimeUsernameProblemLanguageResultExecution timeMemory
1296737Hora000Sailing Race (CEOI12_race)C++20
15 / 100
125 ms2664 KiB
#include<bits/stdc++.h> using namespace std; int n, k; bool check(int i, int j, int dir, int x){ if(i == j){ if(dir == 1) return false; if(dir == 0) return true; } if(dir == 1) swap(i, j); if(i < j && i < x && x < j) return true; if(j < i && (i < x || x < j)) return true; return false; } int main(){ cin >> n >> k; vector<vector<int>> g(n); for(int i = 0; i < n; i++){ while(true){ int x; cin >> x; if(x == 0) break; g[i].push_back(x - 1); } } vector<vector<array<int, 2>>> dp(n, vector<array<int, 2>>(n, {0, 0})); //iben j-ig max, 0 -> ibol jobbra, 1-> ibol balra for(int l = 1; l <= n; l++){ for(int i = 0; i < n; i++){ int j = (i + l) % n; int j2 = (i - l + n) % n; for(auto x : g[i]){ if(check(i, j, 0, x)){ dp[i][j][0] = max(dp[i][j][0], max(dp[x][i][1], dp[x][j][0]) + 1); } if(check(i, j2, 1, x)){ dp[i][j2][1] = max(dp[i][j2][1], max(dp[x][i][0], dp[x][j2][1]) + 1); } } } } array<int, 2> maxi = {-1, 0}; for(int i = 0; i < n; i++) maxi = max(maxi, {dp[i][i][0], i}); for(int i = 0; i < n; i++) maxi = max(maxi, {dp[i][i][1], i}); cout << maxi[0] << "\n" << maxi[1] << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...