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...