제출 #1231587

#제출 시각아이디문제언어결과실행 시간메모리
1231587LIARoller Coaster Railroad (IOI16_railroad)C++17
0 / 100
162 ms14400 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long struct DSU { vector<int> p, r; DSU(int n) : p(n), r(n) { iota(p.begin(), p.end(), 0); } int find(int a) { return p[a] == a ? a : p[a] = find(p[a]); } bool unite(int a, int b) { a = find(a); b = find(b); if (a == b) return false; if (r[a] < r[b]) swap(a, b); p[b] = a; if (r[a] == r[b]) r[a]++; return true; } }; ll plan_roller_coaster(vector<int> s, vector<int> t) { int n = s.size(); vector<int> xs; xs.reserve(2 * n); for (int v : s) xs.push_back(v); for (int v : t) xs.push_back(v); sort(xs.begin(), xs.end()); xs.erase(unique(xs.begin(), xs.end()), xs.end()); int m = xs.size(); vector<ll> diff(m + 1); for (int i = 0; i < n; i++) { int a = lower_bound(xs.begin(), xs.end(), s[i]) - xs.begin(); int b = lower_bound(xs.begin(), xs.end(), t[i]) - xs.begin(); if (a < b) { diff[a]++; diff[b]--; } else { diff[b]--; diff[a]++; } } vector<ll> bal(m - 1); ll cur = 0; for (int i = 0; i < m - 1; i++) { cur += diff[i]; bal[i] = cur; } ll cost1 = 0; for (int i = 0; i < m - 1; i++) { if (bal[i] > 0) cost1 += bal[i] * (xs[i + 1] - xs[i]); } DSU dsu(m); for (int i = 0; i < n; i++) { int a = lower_bound(xs.begin(), xs.end(), s[i]) - xs.begin(); int b = lower_bound(xs.begin(), xs.end(), t[i]) - xs.begin(); dsu.unite(a, b); } for (int i = 0; i < m - 1; i++) { if (bal[i] != 0) { dsu.unite(i, i + 1); } } vector<pair<int,int>> segs; segs.reserve(m - 1); for (int i = 0; i < m - 1; i++) { if (bal[i] == 0) segs.emplace_back(xs[i + 1] - xs[i], i); } sort(segs.begin(), segs.end()); ll cost2 = 0; for (auto &pr : segs) { int idx = pr.second; if (dsu.unite(idx, idx + 1)) cost2 += pr.first; } return cost1 + cost2; }

컴파일 시 표준 에러 (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...