Submission #793843

#TimeUsernameProblemLanguageResultExecution timeMemory
793843vjudge1Passport (JOI23_passport)C++17
22 / 100
2057 ms19028 KiB
#ifdef Home
#define _GLIBCXX_DEBUG
#endif // Home

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long double ld;

const int N = 200200;

pair < int, int > pass[N];
int n, q, x;
int dp[2525][2525];

void solve_subtask_1() {
    int ans = 1, pr_r = 1, cr_r = pass[1].second, nw_r = 1;
    for(; cr_r < n;) {
        nw_r = cr_r;
        for(int r = pr_r + 1; r <= cr_r; ++ r) {
            if(pass[r].second > nw_r) {
                nw_r = pass[r].second;
            }
        }
        if(nw_r == cr_r) {
            cout << "-1";
            return;
        }
        ++ ans;
        pr_r = cr_r;
        cr_r = nw_r;
    }
    cout << ans << '\n';
}

void recur(int l, int r) {
    for(int i = l; i <= r; ++ i) {
        auto &[nl, nr] = pass[i];
        if(nl < l && dp[nl][max(r, nr)] > dp[l][r] + 1) {
            dp[nl][max(r, nr)] = dp[l][r] + 1;
            recur(nl, max(r, nr));
        }
        if(r < nr && dp[min(l, nl)][nr] > dp[l][r] + 1) {
            dp[min(l, nl)][nr] = dp[l][r] + 1;
            recur(min(l, nl), nr);
        }
    }
}

void solve_subtask_2_3() {
    for(int i = 1; i <= n; ++ i) {
        for(int j = i; j <= n; ++ j) {
            dp[i][j] = N;
        }
    }
    dp[pass[x].first][pass[x].second] = 1;
    recur(pass[x].first, pass[x].second);
    cout << (dp[1][n] == N ? -1 : dp[1][n]);
}

main() {
#ifdef Home
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif // Home
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    cin >> n;
    for(int i = 1; i <= n; ++ i) {
        cin >> pass[i].first >> pass[i].second;
    } 
    cin >> q >> x;
    if(q == 1 && x == 1) {
        solve_subtask_1();
        return 0;
    } 
    if(q == 1) {
        solve_subtask_2_3();
        return 0;
    }
}

Compilation message (stderr)

passport.cpp:63:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   63 | main() {
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...