
문제 https://www.acmicpc.net/problem/17228 알고리즘 라빈 카프 해설 정원의 쉼터가N−1개의 길로 연결되어있다는 점에서 트리임을 알 수 있고, 반대방향으로 이동하는 것을 금지한다는 조건에서 DFS접근방식을 생각했습니다. 만영이 취향의 문자열을 해싱한 후, DFS를 수행하며 수행과정에서 얻는 문자열 또한 해싱하며, 해시값이 동일하다면 정답을 카운트해주면 됩니다. 처음 recur() 에서는 롤링 해시할 길이가 없으므로, 가짜 문자인 를넣어주었습니다.DFS와라빈카프를이용했으므로시간복잡도는O(V+E+N)$입니다. 코드 #include #include #define rep(i,n) for(int i=0;i N; adj.resize(N); rep(i, N - 1..

문제 https://www.acmicpc.net/problem/3033 알고리즘 라빈 카프 풀이 https://www.acmicpc.net/problem/1701 길이 제한을 제외하고, 위 문제와 동일합니다. 우리는 1701번 문제를 O(N2)에 해결했지만, 이 문제는 길이 제한이 20만 이므로 다른 전략을 택하도록 합시다. 만약 길이m인 문자열이 두 번 이상 등장한다고 해봅시다. 그러면 m보다 작은 n은 두 번 이상 등장함을 알 수 있을까요? 네. 이는 너무나도 확실합니다. 예를 들어 문자열 aabaa에서 부분 문자열 aa는 두번 등장함을 알 수 있고, 이보다 짧은a는 aa가 등장한 인덱스를 제외하고도 더 등장할 수가 있죠. 그렇다면 길이m보다 긴 길이k는 몇 번 ..
- Total
- Today
- Yesterday
- knapsack
- implementation
- string
- DP
- 펜윅트리
- sorting
- 2-SAT
- SCC
- sweeping
- 좌표압축
- Oracle
- union find
- 스위핑
- Segment tree
- spring
- dfs
- 세그먼트트리
- kmp
- 트라이
- 이분매칭
- 동적계획법
- Fenwick
- 이분탐색
- spring boot
- Suffix Array
- hld
- bfs
- greedy
- dijkstra
- 정렬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |