포럼
문제 R03636

활자 인쇄기 (Type Printer)

스페셜 저지 — 출력을 사용자 정의 프로그램으로 검사하므로 여러 정답이 인정될 수 있습니다.
설명

August 16 – 23, Cairo

Contest Day 1 – Type Printer

English 1.1

활자 인쇄기 (TYPE PRINTER)

여러분은 활자 인쇄기로 N개의 단어를 인쇄해야 한다. 활자 인쇄기는 단어를 만들기 위해 (각각 글자 하나가 새겨진) 작은 금속 조각들을 배치해야 하는 옛날 인쇄기이다. 그 위에 종이를 눌러 단어를 인쇄한다. 여러분의 인쇄기는 다음 연산들을 할 수 있다:
• 현재 인쇄기에 있는 단어의 끝에 글자 하나를 추가한다.
• 현재 인쇄기에 있는 단어의 끝에서 마지막 글자를 제거한다. 이는 인쇄기에 글자가 적어도 하나 있을 때만 할 수 있다.
• 현재 인쇄기에 있는 단어를 인쇄한다.

처음에 인쇄기는 비어 있다. 즉, 글자가 새겨진 금속 조각이 하나도 없다. 인쇄가 끝났을 때 인쇄기에 글자를 남겨 두어도 된다. 또한 단어들을 원하는 어떤 순서로든 인쇄해도 된다.

모든 연산에는 시간이 걸리므로, 총 연산 수를 최소화하고 싶다.

TASK
인쇄하려는 N개의 단어가 주어졌을 때, 임의의 순서로 모든 단어를 인쇄하는 데 필요한 최소 연산 수를 구하고, 그러한 연산 순서 하나를 출력하는 프로그램을 작성하시오.

EXAMPLE

Sample input

Sample output
3
print
the
poem
20
t
h
e
P
-
-
-
p
o
e
m
P
-
-
-
r
i
n
t
P

제약

1 <= N <= 25,000

인쇄해야 하는 단어의 수.

입력 형식

프로그램은 표준 입력에서 다음 데이터를 읽어야 한다:
• 첫 줄에는 인쇄해야 하는 단어의 수인 정수 N이 주어진다.
• 다음 N개의 줄에는 각각 단어 하나가 주어진다. 각 단어는 소문자(‘a’ – ‘z’)로만 이루어져 있으며 길이는 1 이상 20 이하이다.
모든 단어는 서로 다르다.

출력 형식

프로그램은 표준 출력에 다음 데이터를 출력해야 한다:
• 첫 줄에는 N개의 단어를 인쇄하는 데 필요한 최소 연산 수를 나타내는 정수 M을 출력해야 한다.
• 다음 M개의 줄에는 각각 문자 하나씩을 출력해야 한다. 이 문자들은 수행한 연산의 순서를 나타낸다. 각 연산은 다음과 같이 나타내야 한다:
o 글자 추가는 그 글자 자체를 소문자로 나타낸다
o 마지막 글자 제거는 문자 ‘‐‘ (마이너스, ASCII 코드 45)로 나타낸다
o 현재 단어 인쇄는 문자 ‘P’ (대문자 P)로 나타낸다

GRADING
총 40점에 해당하는 여러 테스트에서 N은 18을 넘지 않는다.

August 16 – 23, Cairo

Contest Day 1 – Type Printer

English 1.1

DETAILED FEEDBACK
대회 중에는 이 문제에 대한 제출물이 공식 테스트 데이터의 일부로 평가되며, 결과 요약을 볼 수 있다.

문제 정보

생성자가 기록되지 않았습니다.

출처 IOI 2008

평가 및 의견

Type Printer

개요
출제자 난이도 Unrated 레이팅 미적용 의견 0 / 1 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

Type Printer

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8