题解
格子游戏
1 条题解
-
0
#include <iostream> #include <vector> #include <queue> #include <unordered_map> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; if (!(cin >> n)) return 0; vector<int> a(n); for (int i = 0; i < n; ++i) cin >> a[i]; // next[i] = i 鍙充晶绗竴涓笌 a[i] 浜害鐩稿悓鐨勪綅缃紱涓嶅瓨鍦ㄥ垯涓?-1 vector<int> next(n, -1); unordered_map<int, int> last; // 璁板綍姣忕浜害鏈€杩戯紙鏈€鍙筹級鐨勫嚭鐜颁綅缃? last.reserve(n * 2); for (int i = n - 1; i >= 0; --i) { if (last.count(a[i])) next[i] = last[a[i]]; last[a[i]] = i; } // BFS vector<int> dist(n, -1); queue<int> q; dist[0] = 0; q.push(0); while (!q.empty()) { int u = q.front(); q.pop(); if (u == n - 1) break; int d = dist[u]; // 鍚戝乏 if (u - 1 >= 0 && dist[u - 1] == -1) { dist[u - 1] = d + 1; q.push(u - 1); } // 鍚戝彸 if (u + 1 < n && dist[u + 1] == -1) { dist[u + 1] = d + 1; q.push(u + 1); } // 鐬Щ if (next[u] != -1 && dist[next[u]] == -1) { dist[next[u]] = d + 1; q.push(next[u]); } } cout << dist[n - 1] << '\n'; return 0; }
- 1