【求助】0分全WA,下载数据后发现输出一模一样
查看原帖
【求助】0分全WA,下载数据后发现输出一模一样
121479
聪明的猪楼主2020/12/27 16:08

RT,下为代码(萌新代码dalao轻喷):

#include <cstring>
#include <cstdio>

#include <iostream>
#include <string>

using namespace std;

const int kMaxN(1000000);

int kNext[kMaxN + 5];

void Kmp(const string&, const string&);
void GetFail(const string&, int);

int main(void) {
  string s1, s2;
  memset(kNext, 0, sizeof(kNext));
  ios::sync_with_stdio(false);

  cin >> s1 >> s2;
  Kmp(s1, s2);

  for (int i = 1; i < s2.size() + 1; ++i) {
    if (i != 1)
      putchar(' ');
    cout << kNext[i];
  }

  putchar('\n');

  return 0;
}

void Kmp(const string& s, const string& p) {
  int s_len(static_cast<int>(s.size())), p_len(static_cast<int>(p.size()));
  GetFail(p, p_len);
  int j(0);

  for (int i = 0; i < s_len; ++i) {
    while (j && s[i] != p[j])
      j = kNext[j];

    j += s[i] == p[j];

    if (j == p_len)
      cout << i - p_len + 2 << endl;
  }
}

void GetFail(const string& p, int p_len) {
  for (int i = 1; i < p_len; ++i) {
    int j(kNext[i]);

    while (j && p[i] != p[j])
      j = kNext[j];

    kNext[i + 1] = p[i] == p[j] ? j + 1 : 0;
  }
}
2020/12/27 16:08
加载中...