만드는 중입니다

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

부분 문자열 값의 평균

면접 대비

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

요약
길이가 20만 이하인 숫자 문자열에서 모든 부분 문자열의 최댓값 평균을 구해 기약분수로 출력합니다.
난이도

보통10점 중 4점

유형
스택, 문자열, 수학
정답자
아직 제출이 없습니다

문제

ss를 10진수 숫자(0부터 9까지)로만 이루어진 비어 있지 않은 문자열이라고 하자. ss의 길이를 nn이라 하고, 왼쪽에서 오른쪽으로 숫자에 1,2,3,…,n1, 2, 3, \ldots, n의 번호를 붙인다. 1≤i≤j≤n1 \leq i \leq j \leq n인 i,ji, j에 대해 s[i,j]s[i,j]는 ii번째 자리부터 jj번째 자리까지의 부분 문자열(양 끝 포함)을 뜻한다. 비어 있지 않은 부분 문자열만 고려한다.

각 부분 문자열의 값은 그 안에서 가장 큰 숫자로 정한다. ss의 모든 부분 문자열 값의 평균은 얼마인가?

문자열이 같더라도 위치가 다르면 서로 다른 부분 문자열로 센다. 예를 들어 ss가 1010이면 s[1,2]s[1,2]와 s[3,4]s[3,4]는 둘 다 10이지만 따로 센다. 두 값 모두 11이다.

입력

한 줄에 10진수 숫자로 이루어진 비어 있지 않은 문자열 ss가 주어진다. ss의 길이는 최대 200 000200\,000이다.

출력

평균값을 한 줄에 출력한다. 평균이 정수이면 그 정수를 출력한다. 평균이 a/ba/b(단, aa와 bb는 양의 정수이고 a<ba < b)로 표현되는 진분수이면, 기약분수로 줄여 분자와 분모를 /로 구분해 출력한다. 평균이 11보다 크고 정수가 아니면 정수 부분, 공백, 기약 진분수 순서로 출력한다.

예제4

  1. 예제 1

    입력
    123
    
    예상 출력
    2 1/3
    
  2. 예제 2

    입력
    4084
    
    예상 출력
    6
    
  3. 예제 3

    입력
    1010
    
    예상 출력
    4/5
    
  4. 예제 4

    입력
    00000
    
    예상 출력
    0