제출 #482993

#제출 시각아이디문제언어결과실행 시간메모리
482993jalsol곤돌라 (IOI14_gondola)C++17
55 / 100
22 ms3004 KiB
#include "gondola.h" #ifdef LOCAL #include "local.h" #else #include <bits/stdc++.h> #define debug(...) #define DB(...) #endif using namespace std; const bool __initialization = []() { cin.tie(nullptr)->sync_with_stdio(false); cout << setprecision(12) << fixed; return true; }(); using ll = long long; using ld = long double; #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define For(i, l, r) for (int i = (l); i <= (r); ++i) #define Ford(i, r, l) for (int i = (r); i >= (l); --i) #define Rep(i, n) For (i, 0, (n) - 1) #define Repd(i, n) Ford (i, (n) - 1, 0) #define Fe(...) for (auto __VA_ARGS__) template <class C> inline int isz(const C& c) { return static_cast<int>(c.size()); } template <class T> inline bool chmin(T& a, const T& b) { return (a > b) ? a = b, true : false; } template <class T> inline bool chmax(T& a, const T& b) { return (a < b) ? a = b, true : false; } constexpr ld eps = 1e-9; constexpr int inf = 1e9; constexpr ll linf = 1e18; // ============================================================================= constexpr int maxn = 3e5 + 5; int valid(int n, int a[]) { deque<int> og(n, inf); vector<int> add; add.reserve(n); Rep (i, n) { if (a[i] <= n) { og[i] = a[i]; } else { add.push_back(a[i]); } } int pre = *min_element(all(og)); if (pre <= n) { while (og[pre - 1] != pre) { og.push_back(og.front()); og.pop_front(); } Rep (i, isz(og)) { if (og[i] == inf) continue; if (og[i] != i + 1) { return false; } } } sort(all(add)); Rep (i, isz(add) - 1) { if (add[i] == add[i + 1]) { return false; } } return true; } // I'm just so fucking dumb... int replacement(int n, int a[], int ret[]) { set<pair<int, int>> st; Rep (i, n) { if (a[i] > n) { st.emplace(a[i], i); } } int p = min_element(a, a + n) - a; if (a[p] <= n) { For (off, 1, n - p - 1) { a[p + off] = a[p] + off; if (a[p + off] > n) a[p + off] -= n; } For (off, 1, p) { a[p - off] = a[p] - off; if (a[p - off] <= 0) a[p - off] += n; } } else { Rep (i, n) { a[i] = i + 1; } } debug(st); if (!isz(st)) return 0; int maxi = st.rbegin()->first; int ans = 0; For (val, n + 1, maxi) { auto it = st.lower_bound(pair(val, -1)); ret[ans++] = a[it->second]; a[it->second] = val; if (val == it->first) { st.erase(it); } } return ans; } int countReplacement(int n, int a[]) { assert(false); }
#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...
#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...