5525번 - IOIOI
라빈 카프로 문제를 풀고 싶습니다. power를 2씩 곱하고 모듈러 연산을 사용하지 않으니 틀렸다고 나오고
해시 충돌이 나서 그런가 싶어 모듈러와 power 값을 막 바꿔봐도 틀렸다고 나옵니다.
어떻게 해결할 수 있을까요? 아니면 제 코드가 잘못 된것일까요?
길이가 100만인 문자열에 10억 7 범위에서 해시를 할 경우 충돌이 발생할 확률은 1에 한없이 가깝습니다. 훨씬 더 큰 범위에서 해야 합니다.
길이가 100만이 아니라 10만이어도 충돌 확률이 이미 99%가 넘습니다.
모듈러 값을 더 크게 해도 계속 오답이 나옵니다.
그럼 어떤 로직으로 바꿔야 하는건가요?
더 크게가 어느 정도인지는 모르겠지만 long long 전체 범위 정도는 써야 안전할 겁니다. 아니면 모듈로 값을 2개를 쓰셔도 되고요.
그리고 제가 라빈 카프에 대해 조예가 깊지 않아서 모르는 걸 수도 있겠으나 power 값을 중도에 바꾸는 건 처음 봅니다. 보통은 작은 소수 하나로 고정하고 하지 않나요?
https://blog.naver.com/PostView.nhn?blogId=kks227&logNo=220927272165&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F
여기와 같이 a진법(power) 변환을 위해 비슷한 로직으로 해 봤습니다.
한번 더 시도해 보겠습니다.!
댓글을 작성하려면 로그인해야 합니다.
hanil0623 3년 전
라빈 카프로 문제를 풀고 싶습니다. power를 2씩 곱하고 모듈러 연산을 사용하지 않으니 틀렸다고 나오고
해시 충돌이 나서 그런가 싶어 모듈러와 power 값을 막 바꿔봐도 틀렸다고 나옵니다.
어떻게 해결할 수 있을까요? 아니면 제 코드가 잘못 된것일까요?