WA on test 2求条
查看原帖
WA on test 2求条
778022
yhylivedream楼主2025/6/24 19:32

感觉思路没问题

#include <bits/stdc++.h>
#define int long long

using namespace std;
using Pii = pair<int, int>;
using ULL = unsigned long long;

const int kMaxN = 2e5 + 5, kB = 13331;

int T, n, l, r;
ULL h[kMaxN], pw[kMaxN];
string s;

map<ULL, vector<Pii>> mp;
ULL Hash(int x, int y) {
  return h[y] - h[x - 1] * pw[y - x + 1];
}
bool W(int x) {
  mp.clear();
  for (int i = 1, j = x; j <= n; i++, j++) {
    mp[Hash(i, j)].push_back({j, i});
  }
  for (auto [o, v] : mp) {
    sort(v.begin(), v.end());
    int c = 0, pr = -1e9;
    for (Pii p : v) {
      if (p.second > pr) pr = p.first, c++;
    }
    if (c >= l) return 1;
  }
  return 0;
}

signed main() {
  cin.tie(0)->ios::sync_with_stdio(0), pw[0] = 1;
  for (int i = 1; i < kMaxN; i++) pw[i] = pw[i - 1] * kB;
  for (cin >> T; T--;) {
    cin >> n >> l >> r >> s, s = ' ' + s;
    for (int i = 1; i <= n; i++) {
      h[i] = h[i - 1] * kB + s[i];
    }
    int l = 0, r = n + 1;
    for (; l + 1 < r;) {
      int mid = (l + r) / 2;
      W(mid) ? (l = mid) : (r = mid);
    }
    // cout << W(3) << '\n';
    cout << l << '\n';
  }
}
/*
2 3

998244352
3
2
998244352

1
1
2
5
*/
2025/6/24 19:32
加载中...