题目描述
吸氧前
吸氧后
#include <bits/stdc++.h>
using namespace std;
int st, p, ed = 123804765, limit;
int a[] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
bool f;
unordered_map<int, int> mp;
inline int at(int x, int i) { return x % a[i + 1] / a[i]; }
inline int swap_at(int x, int p, int i) { return x - at(x, i) * a[i] + at(x, i) * a[p]; }
void dfs(int x, int p, int d, int dir) {
if (mp[x] + dir == 3) f = 1;
mp[x] = dir;
if (d == limit) return;
if (p / 3) dfs(swap_at(x, p, p - 3), p - 3, d + 1, dir);
if (p / 3 != 2) dfs(swap_at(x, p, p + 3), p + 3, d + 1, dir);
if (p % 3) dfs(swap_at(x, p, p - 1), p - 1, d + 1, dir);
if (p % 3 != 2) dfs(swap_at(x, p, p + 1), p + 1, d + 1, dir);
}
int main() {
scanf("%d", &st);
for (; at(st, p); p++);
while (1) {
dfs(st, p, 0, 1);
if (f) return 0 * printf("%d", (limit << 1) - 1);
dfs(ed, 4, 0, 2);
if (f) return 0 * printf("%d", limit << 1);
limit++;
}
return 0;
}