Module: 해싱


Problem

7 /8


문화적 접촉

Theory Click to read/hide

시퀀스 외에도 세트를 해시할 수도 있습니다. 즉, 순서가 없는 개체 집합입니다. 다음 공식에 따라 계산됩니다.
hash(A) = \(\sum_{a \in A} p^{ord(a)}\)   <- 모듈로 모든 것을 계산
여기서 ord는 가능한 모든 객체 중에서 집합의 객체에 절대 서수를 할당하는 함수입니다(예를 들어 객체가 자연수이면 ord(x) = x이고 소문자 라틴 문자이면 ord(& #39;a') = 1, ord('b') = 2 등)

즉, 각 개체에 대해 기본과 같은 값을 이 개체 수의 거듭제곱에 연결하고 전체 세트의 해시를 얻기 위해 이러한 모든 값을 합산합니다. 수식에서 알 수 있듯이 집합에 요소를 추가하거나 제거하면(필요한 값을 더하거나 빼기만 하면) 해시가 쉽게 다시 계산됩니다. 같은 논리,  단일 요소가 추가되거나 제거되지 않고 다른 집합이 있는 경우(그냥 해시를 더하거나 뺍니다).

이미 이해할 수 있듯이 단일 요소는 해시를 계산할 수 있는 크기 1의 집합으로 간주됩니다. 그리고 더 큰 세트는 단순히 이러한 단일 세트의 합집합이며 세트를 결합하여 해시를 추가합니다.

사실 이것은 여전히 ​​동일한 다항식 해시이지만 pm 의 계수 이전에는 다음 값을 가졌습니다. 번호 n - m - 1(여기서 n은 시퀀스의 길이) 아래의 시퀀스 요소의 수이며, 이제 이것은 절대 서수가 m과 같은 세트의 요소 수입니다.

그러한 해싱에서는 충분히 큰 기준(최대 세트 크기보다 큼)을 취하거나 이중 해싱을 사용하여 절대 서수 m을 가진 p개 객체 집합이 절대 서수를 가진 하나의 객체가 있는 집합과 동일한 해시를 갖는 상황을 피해야 합니다. 서수 m+1.
 

Problem

18세기 초, 한 무리의 유럽 탐험가들이 유럽 문명의 대표자들과 한 번도 접촉한 적이 없는 부족들이 거주하는 섬에 도착했습니다.

원주민들과 성공적으로 접촉하기 위해 그룹의 리더는 만나는 각 부족의 리더에게 선물을 줄 계획입니다. 이를 위해 그는 보석과 비슷한 긴 유리 사슬을 가져왔습니다. 
문자열을 영문 소문자로 구성된 문자열 s로 표현해 보겠습니다. 각 문자는 해당 위치에 있는 유리 조각의 종류를 의미합니다. 
연구원들은 사슬을 일부 조각으로 자른 다음 정확히 하나의 조각을 그룹이 만나는 각 부족의 지도자에게 넘길 것입니다. 연구 책임자는 다음 규칙에 따라 체인을 조각으로 나누기로 결정했습니다.
  • 절단에 많은 시간을 소비하지 않으려면 각 조각은 체인에서 인접한 유리 조각 그룹, 즉 문자열 s의 하위 문자열이어야 합니다.
  • 모든 유리 조각을 사용해야 합니다. 즉, 각 유리 조각은 정확히 하나의 조각에 포함되어야 합니다.
  • 연구원들은 원주민들이 특정 유형의 유리를 어떻게 평가할지 모르기 때문에 각 추장이 주문에 관계없이 동일한 유리 세트를 받기를 원합니다. 즉, 모든 유형의 유리에 대해 이 유형의 유리 수는 각 조각에서 동일해야 합니다.
  • 연구원들은 섬에 얼마나 많은 부족이 살고 있는지 모르기 때문에 준비된 조각의 수는 최대한 많아야 합니다.

관리자가 얻을 수 있는 최대 조각 수를 결정하도록 도와주세요.

입력:
첫 번째 줄에는 문자열 s(1 <= |s| <= 5000000)가 포함됩니다.

출력:
하나의 숫자를 인쇄하십시오 - 연구원이 그룹 리더가 공식화한 조건을 위반하지 않고 체인을 절단할 수 있는 최대 조각 수입니다.

예:
  <몸>
설명:
첫 번째 예에서 연구자들은 'abbabbbab'이라는 사슬을 끊을 수 있습니다. 파편 'abb', 'abb', 'bab', 그러면 그들이 만나는 각 부족의 지도자는 유형 'a' 한 잔을 얻을 것입니다. 그리고 'b' 두 조각.

두 번째 예에서 문자열은 모든 조건을 준수하면서 둘 이상의 체인 조각으로 나눌 수 없습니다.
입력 출력
아빠밥 3
아브 1