# KMP
kmp를 알고 있다면 크게 어렵지 않은 문제!..
물론 kmp가 어렵지만 ㅎㅎ;;
# 실수 했던 점
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#define MAX 5005
#define INF 987654321
#define MOD 31991
#pragma warning(disable:4996)
using namespace std;
int n;
char a[1000001], b[2000001];
int kmp[1000000];
int ans;
void make_pi()
{
int j = 0;
for (int i = 1; i < n; i++) {
while (j > 0 && a[i] != a[j]) {
j = kmp[j - 1];
}
if (a[i] == a[j])
kmp[i] = ++j;
}
}
int get_gcd(int a, int b)
{
if (b == 0)
return a;
return get_gcd(b, a%b);
}
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf(" %c", &a[i]);
for (int i = 0; i < n; i++)
scanf(" %c", &b[i]);
for (int i = 0; i < n; i++)
b[n + i] = b[i];
make_pi();
int j = 0;
for (int i = 0; i < n * 2; i++) {
while (j > 0 && a[j] != b[i]) {
j = kmp[j - 1];
}
if (a[j] == b[i]) {
if (j == n - 1) {
if (i - n + 1 < n)
ans++;
j = kmp[j];
}
else
j++;
}
}
int gcd = get_gcd(ans, n);
printf("%d/%d", ans / gcd, n / gcd);
return 0;
}'IT > BOJ' 카테고리의 다른 글
| 백준(BOJ) 16165 걸그룹 마스터 준석이 * (0) | 2018.10.04 |
|---|---|
| 백준(BOJ) 2316 도시 왕복하기 *** (0) | 2018.10.01 |
| 백준(BOJ) 1298 노트북 주인을 찾아서 ** (0) | 2018.09.30 |
| 백준(BOJ) 9240 로버트 후드 *** (0) | 2018.09.28 |
| 백준(BOJ) 1965 상자넣기 * (0) | 2018.09.28 |