WA on 7求条
查看原帖
WA on 7求条
778022
yhylivedream楼主2025/6/29 12:57
#include <bits/stdc++.h>

using namespace std;
using Pii = pair<int, int>;

const int kMaxN = 5e4 + 1000 + 5, kC = 26;

int n, m, idx, id[kC][kC], f[kC * kC][kMaxN];
vector<Pii> e[kMaxN];
string s;

void S(int x) {
  deque<int> q;
  fill(f[x] + 1, f[x] + n + kC * kC, 1e9);
  q.push_back(x + n), f[x][x + n] = 0;
  for (; q.size();) {
    int o = q.front();
    q.pop_front();
    for (auto [nxt, w] : e[o]) {
      if (f[x][o] + w < f[x][nxt]) {
        f[x][nxt] = f[x][o] + w;
        if (!w) q.push_front(nxt);
        else q.push_back(nxt);
      }
    }
  }
}

signed main() {
  cin.tie(0)->ios::sync_with_stdio(0);
  cin >> s >> m, idx = n = s.size(), s = ' ' + s;
  for (int i = 0; i < kC; i++) {
    for (int j = 0; j < kC; j++) id[i][j] = ++idx;
  }
  for (int i = 1; i < n; i++) {
    if (i != 1) e[i].push_back({i - 1, 1});
    if (i + 1 != n) e[i].push_back({i + 1, 1});
    e[i].push_back({id[s[i] - 'a'][s[i + 1] - 'a'], 0});
    e[id[s[i] - 'a'][s[i + 1] - 'a']].push_back({i, 1});
  }
  for (int i = 0; i < kC * kC; i++) S(i);
  for (int l, r; m--;) {
    cin >> l >> r;
    if (l > r) swap(l, r);
    int ans = r - l;
    for (int i = 0; i < kC * kC; i++) {
      ans = min(ans, f[i][l] + f[i][r] - 1);
    }
    cout << ans << '\n';
  }
}
/*
2 3 4 5
2
3
2*2
5
2*2*3*5

2 5
4 6
*/
2025/6/29 12:57
加载中...