아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

이노폴리스의 생명

시간 제한1초메모리 제한512 MB

요약
DNA 문자열이 주어질 때, i번째 접미사가 i+1번째 접미사보다 사전순으로 작은 위치 i의 개수를 센다.
난이도

보통10점 중 6점

유형
문자열, 문자열 매칭, 수학, 조합론
정답자
아직 제출이 없습니다

문제

\mathbb{INNOPOLIS} \~ \mathbb{TIMES}

2016년 12월 18일


이노폴리스에 생명이 있는가?


이노폴리스의 생명은 우주에서 온 물체가 가져왔을지도 모른다. 한 과학자가 이 지역에서 채취한 물의 성분을 조사한 끝에 내린 결론이다. 이상한 DNA 구조가 그를 흥미롭게 했다. 연구에는 수년이 걸릴 것이다...

연구를 앞당기기 위해 그가 당신을 찾아왔다. DNA를 네 가지 염기 A, C, G, T에 대응하는 네 개의 대문자로 이루어진 문자열 ss로 나타내자. 과학자의 질문은 하나뿐이다. 몇 개의 위치 ii에서 위치 ii부터 시작하는 접미사가 위치 i+1i + 1부터 시작하는 접미사보다 사전순으로 작은가?

접미사는 문자열의 마지막 문자로 끝나는 연속한 문자의 나열이다. 문자열 자체도 자기 자신의 접미사이다. 예를 들어 ACGC, CGC, GC, C는 모두 문자열 ACGC의 접미사이다.

문자열 aa가 문자열 bb보다 사전순으로 작다는 것은, aa와 bb의 처음 kk개 문자가 같고 ak+1<bk+1a_{k+1} < b_{k+1}인 kk가 존재하거나, aa가 bb보다 짧으면서 모든 i≤∣a∣i \le |a|에 대해 ai=bia_i = b_i라는 뜻이다. 예를 들어 "A" < "G", "AAG" < "AAT", "AGC" < "AGCA"이다.

입력

입력은 라틴 알파벳 대문자 A, C, G, T로만 이루어진 문자열 ss 하나로 주어진다.

문자열의 길이는 3 000 0003\,000\,000을 넘지 않는다.

출력

위치 ii부터 시작하는 접미사가 위치 i+1i + 1부터 시작하는 접미사보다 사전순으로 작은 위치 ii의 개수를 정수 하나로 출력한다.

힌트

첫 번째 예제에는 그러한 위치가 세 개 있다.

  1. i=1i=1: "ACGACA" < "CGACA"
  2. i=2i=2: "CGACA" < "GACA"
  3. i=4i=4: "ACA" < "CA"

두 번째 예제에는 두 개뿐이다.

  1. i=1i=1: "AATTAA" < "ATTAA"
  2. i=2i=2: "ATTAA" < "TTAA"

예제2

  1. 예제 1

    입력
    ACGACA
    
    예상 출력
    3
    
  2. 예제 2

    입력
    AATTAA
    
    예상 출력
    2