写了个Manacher,为啥样例都过不了?
查看原帖
写了个Manacher,为啥样例都过不了?
307211
ChickyHas楼主2022/7/24 11:06
#include <bits/stdc++.h>

using namespace std;

const int N = 5e5 + 5;

string _s, s;
int n, len[N * 2];
long long ans;

void E() {
  n = _s.size() * 2 + 1;
  s = string(n, ' ');
  for (int i = 0; i < n; ++i) {
    s[i] = i & 1 ? _s[i / 2] : '#';
  }
}

char T(char c) {
  if (c == '1') {
    return '0';
  }
  if (c == '0') {
    return '1';
  }
  return c;
}

void C() {
  for (int k = 0, i, j = 0; k < n; ++k) {
    if (k < j) {
      if (k + len[2 * i - k] < j) {
        len[k] = len[2 * i - k];
        continue;
      }
    } else {
      j = k;
    }
    for (i = k; j < min(n, 2 * i + 1) && T(s[j]) == s[2 * i - j]; ++j) {
    }
    len[k] = j - i;
    ans += len[k] / 2;
  }
}

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
  cin >> n >> _s;
  E(), C();
  cout << ans;
  return 0;
}

2022/7/24 11:06
加载中...