Submission #290685

#TimeUsernameProblemLanguageResultExecution timeMemory
290685SamAnd고대 책들 (IOI17_books)C++17
50 / 100
195 ms19832 KiB
#include "books.h" #include <bits/stdc++.h> using namespace std; #define m_p make_pair #define fi first #define se second #define all(x) (x).begin(),(x).end() #define sz(x) ((int)(x).size()) typedef long long ll; const int N = 1000006; int n; int bfs(vector<int> p, int s) { for (int i = 0; i < n; ++i) ++p[i]; map<pair<vector<int>, pair<int, int> >, int> mp; deque<pair<vector<int>, pair<int, int> > > q; q.push_back(m_p(p, m_p(s, 0))); mp[m_p(p, m_p(s, 0))] = 0; while (1) { pair<vector<int>, pair<int, int> > t = q.front(); q.pop_front(); bool z = true; if (t.se.fi != s) z = false; for (int i = 0; i < n; ++i) { if (t.fi[i] != i + 1) { z = false; break; } } if (z) return mp[t]; pair<vector<int>, pair<int, int> > h; h = t; if (h.se.fi != n - 1) { ++h.se.fi; if (mp.find(h) == mp.end()) { mp[h] = mp[t] + 1; q.push_back(h); } } h = t; if (h.se.fi != 0) { --h.se.fi; if (mp.find(h) == mp.end()) { mp[h] = mp[t] + 1; q.push_back(h); } } h = t; swap(h.se.se, h.fi[h.se.fi]); if (mp.find(h) == mp.end()) { mp[h] = mp[t]; q.push_front(h); } } } int q[N]; bool s[N]; long long minimum_walk(std::vector<int> p, int s0) { n = sz(p); ll ans = 0; for (int i = 0; i < n; ++i) { ans += abs(i - p[i]); } for (int i = 0; i < n; ++i) { q[min(i, p[i])]++; q[max(i, p[i])]--; } for (int i = n - 1; i >= 0; --i) { s[i] = (s[i + 1] || (i != p[i])); } for (int i = 0; i < n; ++i) { q[i] += q[i - 1]; if (!q[i]) { if (s[i + 1]) ans += 2; } } //printf("%d\n", bfs(p, s0)); return ans; }
#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...