Stunning Garbanzo
open main menu
Part of series: PS

12104 BOJ

/ 1 min read

문제

접근

코드

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef const ll cll;

cll N = 1e5;
ll n, pi[N] = {};
string strA, strB;

int main(void) {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);

  cin >> strA >> strB;
  n = strA.size();

  for (ll i = 1, prv = pi[0]; i < n; ++i) {
    while (prv && strA[i] != strA[prv]) {
      prv = pi[prv - 1];
    }

    prv = pi[i] = (strA[i] == strA[prv] ? prv + 1 : 0);
  }

  strB = strB + strB;
  ll result = 0, a = 0, b = 0;
  while (b < 2 * n - 1) {
    if (strA[a] == strB[b]) {
      ++a, ++b;
    } else if (a) {
      a = pi[a - 1];
    } else {
      ++b;
    }

    if (a == n) {
      ++result, a = pi[n - 1];
    }
  }

  cout << result << "\n";

  return 0;
}