Submission #1203741

#TimeUsernameProblemLanguageResultExecution timeMemory
1203741onbertRoller Coaster Railroad (IOI16_railroad)C++20
30 / 100
169 ms38884 KiB
#include "railroad.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int INF = 1e9;
const int maxn = 4e5 + 5;
int sz;
vector<int> vals = {-INF};
int dc(int x) {return lower_bound(vals.begin(), vals.end(), x) - vals.begin();}
int n;
vector<int> adj[maxn];
int sum[maxn];

bool vis[maxn];
void dfs(int u) {
    vis[u] = true;
    for (int v:adj[u]) if (!vis[v]) dfs(v);
}

long long plan_roller_coaster(vector<int32_t> s, vector<int32_t> t) {
    s.push_back(INF); t.push_back(1);
    n = s.size();
    for (int i=0;i<n;i++) {
        vals.push_back(s[i]); vals.push_back(t[i]);
    }
    sort(vals.begin(), vals.end());
    vals.erase(unique(vals.begin(), vals.end()), vals.end());
    sz = vals.size() - 1;
    for (int i=0;i<n;i++) s[i] = dc(s[i]), t[i] = dc(t[i]);

    for (int i=0;i<n;i++) adj[s[i]].push_back(t[i]);

    for (int i=0;i<n;i++) sum[s[i]]++, sum[t[i]]--;
    for (int i=sz;i>=1;i--) {
        // cout << i << " " << sum[i] << endl;
        if (sum[i] < 0) return 1;
        if (sum[i] > 0) {
            adj[i-1].push_back(i);
            // cout << i << endl;
        }
        sum[i-1] += sum[i];
    }
    dfs(1);
    for (int i=1;i<=sz;i++) {
        // cout << i << " " << vis[i] << endl;
        if (!vis[i]) return 1;
    }
    // cout << endl;

    return 0;
}

Compilation message (stderr)

railroad.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
railroad_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...