Submission #1227609

#TimeUsernameProblemLanguageResultExecution timeMemory
1227609The_SamuraiAncient Books (IOI17_books)C++20
12 / 100
2109 ms1114112 KiB
#include "books.h"
#include "bits/stdc++.h"
using namespace std;

long long minimum_walk(std::vector<int> p, int s) {
	int n = p.size();
	set<pair<vector<int>, int>> vis;
	queue<tuple<vector<int>, int, int>> q;
	vector<int> v(n);
	iota(v.begin(), v.end(), 0);

	auto add = [&](const vector<int> &v, int s, int d) -> void {
		if (vis.count(make_pair(v, s))) return;
		vis.emplace(v, s);
		q.emplace(v, s, d);
	};
	add(v, s, 0);

	while (!q.empty()) {
		auto [v, i, d] = q.front(); q.pop();
		// for (int x: v) cout << x << ' ';
		// cout << endl;
		if (v == p and i == s) return d;
		vector vis(n, false);
		for (int x: v) if (x >= 0) vis[x] = true;
		int have = -1;
		for (int i = 0; i < n; i++) if (!vis[i]) have = i;
		swap(have, v[i]);
		add(v, i, d);
		swap(have, v[i]);
		if (i > 0) add(v, i - 1, d + 1);
		if (i + 1 < n) add(v, i + 1, d + 1);
	}
	assert(false);
	return -1;
}
#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...