# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
271529 | 2020-08-18T06:33:26 Z | hamerin | 고대 책들 (IOI17_books) | C++17 | 3 ms | 512 KB |
#include "books.h" #include <bits/stdc++.h> #pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") using namespace std; using i64 = long long; using d64 = long double; using pi = pair<int, int>; using pli = pair<i64, i64>; using ti = tuple<int, int, int>; using tli = tuple<i64, i64, i64>; #define iterall(cont) cont.begin(), cont.end() #define prec(n) setprecision(n) << fixed i64 minimum_walk(vector<int> p, int s) { const int N = p.size(); vector<vector<int>> cycles; vector<set<int>> cyc_st; vector<int> cyc(N); vector<bool> vst(N); for (int i = 0; i < N; i++) { if (vst[i]) continue; cycles.emplace_back(vector<int>()); cyc_st.emplace_back(set<int>()); int cur = i; while (cycles.back().empty() || cur != i) { cycles.back().emplace_back(cur); cyc_st.back().emplace(cur); cyc[cur] = cycles.size() - 1; vst[cur] = true; cur = p[cur]; } } i64 ans = 0; for (int i = 0; i < N; i++) ans += abs(i - p[i]); vector<pi> intervals; for (auto &st : cyc_st) intervals.emplace_back(*st.begin(), *prev(st.end())); sort(iterall(intervals)); // interval 합치기 vector<pi> newIntervals; for (auto [l, r] : intervals) { if (!newIntervals.empty() && newIntervals.back().second > l) { newIntervals.back().second = r; } else { newIntervals.emplace_back(l, r); } } while (!newIntervals.empty() && newIntervals.back().first == newIntervals.back().second) newIntervals.pop_back(); cout<<newIntervals.size()<<endl; for (int i = 0; i < (int)newIntervals.size() - 1; i++) { cout<<i<<endl; ans += 2 * (newIntervals[i + 1].first - newIntervals[i].second); } // Strategy // Disjoint Set의 Lmost, Rmost interval까지의 거리 저장 // Recursive하게 dp로 해결 가능할 듯 return ans; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 1 ms | 256 KB | secret mismatch |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 1 ms | 256 KB | secret mismatch |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 1 ms | 256 KB | secret mismatch |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 3 ms | 512 KB | secret mismatch |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 1 ms | 256 KB | secret mismatch |
2 | Halted | 0 ms | 0 KB | - |