만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

허용 가능한 지도

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

요약
U, L, D, R로 이루어진 문자열에서 행 단위로 격자에 채웠을 때 화살표가 격자 안에서 사이클만 이루는 부분 문자열의 개수를 구합니다.
난이도

보통10점 중 7점

유형
문자열, 해시맵, 문자열 매칭
정답자
아직 제출이 없습니다

문제

지도는 U, L, D, R 기호로 이루어진 행렬이다.

지도 행렬 aa의 지도 그래프는 n⋅mn \cdot m개의 정점을 가진 방향 그래프다. 정점은 (i,j)(i, j) (1≤i≤n;1≤j≤m1 \le i \le n; 1 \le j \le m)로 번호가 매겨지며, nn은 행의 수, mm은 열의 수다. 이 그래프에는 n⋅mn \cdot m개의 간선이 있고, 간선은 (i,j)→(i+diai,j,j+djai,j)(i, j) \to (i + di_{a_{i,j}}, j + dj_{a_{i,j}})로 정해진다. 여기서 (diU,djU)=(−1,0)(di_U, dj_U) = (-1, 0), (diL,djL)=(0,−1)(di_L, dj_L) = (0, -1), (diD,djD)=(1,0)(di_D, dj_D) = (1, 0), (diR,djR)=(0,1)(di_R, dj_R) = (0, 1)이다. 모든 간선이 그래프 안의 유효한 정점을 가리키면 지도 그래프가 유효하다고 한다.

허용 가능한 지도는 지도 그래프가 유효하고 사이클들의 집합으로 이루어진 지도다.

지도 aa의 설명은 모든 행을 이어 붙인 문자열 a1,1a1,2…a1,ma2,1…an,ma_{1,1} a_{1,2} \ldots a_{1,m} a_{2,1} \ldots a_{n,m}이다.

문자열 ss가 주어진다. ss의 부분 문자열 중 어떤 허용 가능한 지도의 설명이 될 수 있는 것의 개수를 구하라. 부분 문자열은 두 인덱스 pp, qq (1≤p≤q≤l1 \le p \le q \le l, ll은 ss의 길이)로 정해지며 spsp+1…sqs_p s_{p+1} \ldots s_q와 같다. 문자열이 같더라도 (p,q)(p, q)가 다르면 서로 다른 부분 문자열이다.

입력

입력은 한 줄이며, 길이가 1 이상 20,000 이하인 문자열 ss가 주어진다. 각 문자는 U, L, D, R 중 하나다.

출력

허용 가능한 지도의 설명이 될 수 있는 ss의 부분 문자열 개수를 한 줄에 출력한다.

힌트

첫 번째 예시에서는 허용 가능한 지도의 설명이 되는 부분 문자열이 두 개다. RDUL을 2×22 \times 2 행렬로 본 경우 (그림 1)와 DU를 2×12 \times 1 행렬로 본 경우 (그림 2)다.

두 번째 예시에서는 조건을 만족하는 부분 문자열이 없다. 예를 들어 RDRU를 2×22 \times 2 행렬로 보면 결과 그래프가 사이클들의 집합이 아니다 (그림 3).

세 번째 예시에서는 RL 3개, RLRL 2개, RLRLRL 1개가 조건을 만족한다. 일부 문자열은 여러 방식으로 행렬이 될 수 있다. 예를 들어 RLRLRL은 3×23 \times 2 행렬 (그림 4)로도, 1×61 \times 6 행렬 (그림 5)로도 볼 수 있다.

예제3

  1. 예제 1

    입력
    RDUL
    
    예상 출력
    2
    
  2. 예제 2

    입력
    RDRU
    
    예상 출력
    0
    
  3. 예제 3

    입력
    RLRLRL
    
    예상 출력
    6