a부터 b까지 각 너비 m에 대해 단어를 순서대로 m자 이내의 줄에 채우고 각 줄의 첫 단어를 이어 만든 문장의 길이를 구합니다.
어려움8분할 정복누적 합이분 탐색아직 제출이 없습니다시간 제한2초메모리 제한512 MB고정폭 글꼴과 단순한 탐욕 알고리즘으로 책을 조판한다. 책의 내용은 단어의 나열이고 각 단어는 한 글자 이상으로 이루어진다.
조판을 시작하기 전에 한 줄의 최대 길이를 정하고 그 값을 m이라고 한다. 각 줄은 단어 사이에 들어가는 공백까지 세어 최대 m글자다. 알고리즘은 단어를 앞에서부터 하나씩 처리하며 같은 줄에 놓인 두 단어 사이에 공백을 정확히 하나 넣어 출력한다. 지금 줄에 다음 단어를 이어 붙이면 최대 길이 m을 넘는 경우에는 그 단어부터 새 줄을 시작한다.
|its.a.long...| |its.a.long.way|
|way.to.the...| |to.the.top.if.|
|top.if.you...| |you.wanna.rock|
|wanna.rock.n.| |n.roll........|
|roll.........|
"its a long way to the top if you wanna rock n roll"을 최대 줄 길이 13과 14로 조판한 모습이다. 점은 공백을 나타낸다.
m을 하나 고정하자. 각 줄의 첫 단어를 위에서 아래로 모아 공백 하나로 이은 문장을 선두 문장이라고 한다. 위 그림에서 최대 줄 길이가 14일 때 선두 문장은 "its to you n"이다.
조판할 텍스트와 두 정수 a, b가 주어진다. a 이상 b 이하인 모든 최대 줄 길이에 대해 선두 문장의 길이를 구하라. 문장의 길이는 그 문장에 들어 있는 공백까지 센 전체 글자 수다.
첫째 줄에 조판할 텍스트가 주어진다. 텍스트는 공백 하나로 구분한 단어의 나열이고 각 단어는 영어 소문자 한 개 이상으로 이루어진다.
둘째 줄에 두 정수 a와 b가 주어진다. 위에서 설명한 구간의 양 끝이다.
텍스트에서 가장 긴 단어의 길이를 w, 공백까지 센 텍스트 전체의 글자 수를 z라고 하면 1≤w≤a≤b≤z≤500000이다.
b−a+1개의 줄을 출력한다. k번째 줄에는 최대 줄 길이가 a−1+k일 때 선두 문장의 길이를 정수 하나로 출력한다.