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

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

트럭의 역사

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

요약
모든 트럭 코드를 해밍 거리 합이 최소가 되도록 연결한 뒤 1/Q를 출력한다. 완전 그래프의 최소 신장 트리 문제이다.
난이도

보통10점 중 6점

유형
최소 신장 트리, 그래프, 그리디, 문자열 매칭
정답자
아직 제출이 없습니다

문제

Advanced Cargo Movement, Ltd.는 여러 종류의 트럭을 사용한다. 어떤 트럭은 채소 배달에, 다른 트럭은 가구나 벽돌 운반에 쓰인다. 회사는 각 트럭 종류를 설명하는 자체 코드를 가지고 있다. 이 코드는 정확히 7개의 소문자 알파벳으로 이루어진 문자열이다(각 위치의 글자마다 특별한 의미가 있지만, 이 문제에서는 중요하지 않다). 회사 역사의 초기에는 단 하나의 트럭 종류만 사용되었지만, 이후 그것으로부터 다른 종류들이 파생되었고, 다시 그 새로운 종류들로부터 또 다른 종류들이 파생되는 식으로 이어졌다.

오늘날 이 회사는 자신의 역사를 연구할 역사학자를 고용할 만큼 부유하다. 역사학자들이 알아내고자 한 것 중 하나는 이른바 '파생 계획', 즉 트럭 종류들이 어떤 순서로 파생되었는가이다. 그들은 두 트럭 종류 사이의 거리를 두 코드에서 서로 다른 글자가 있는 위치의 개수로 정의했다. 또한 각 트럭 종류는 정확히 다른 한 종류로부터 파생되었다고 가정한다(단, 어느 종류로부터도 파생되지 않은 최초의 종류는 예외이다). 파생 계획의 품질은 다음과 같이 정의된다.

1∑(to,td)d(to,td)\frac{1}{\sum_{(t_o, t_d)} d(t_o, t_d)}

여기서 합은 파생 계획에 속한 모든 쌍에 대해 취하며, tot_o는 원본 종류, tdt_d는 그로부터 파생된 종류이고, d(to,td)d(t_o, t_d)는 두 종류 사이의 거리이다.

트럭 종류들의 코드가 주어질 때, 가능한 파생 계획 중 가장 높은 품질을 구하는 프로그램을 작성하라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 트럭 종류의 개수 NN(2≤N≤20002 \le N \le 2000)이 적힌 줄로 시작한다. 그 다음 NN개의 줄에는 각각 하나의 트럭 종류 코드(7개의 소문자 알파벳으로 이루어진 문자열)가 주어진다. 코드들은 트럭을 유일하게 구별하며, NN개의 줄 중 서로 같은 것은 없다. 입력은 트럭 종류의 개수 자리에 00이 주어지는 줄로 끝난다.

출력

각 테스트 케이스마다 The highest possible quality is 1/Q. 형식의 줄을 하나 출력한다. 여기서 1/Q1/Q는 가장 좋은 파생 계획의 품질이며, QQ는 가능한 모든 파생 계획에서 거리의 합이 최소가 되는 값이다.

예제3

  1. 예제 1

    입력
    4
    aaaaaaa
    baaaaaa
    abaaaaa
    aabaaaa
    0
    
    예상 출력
    The highest possible quality is 1/3.
    
  2. 예제 2

    입력
    2
    aaaaaaa
    aaaaaab
    0
    
    예상 출력
    The highest possible quality is 1/1.
    
  3. 예제 3

    입력
    4
    aaaaaaa
    baaaaaa
    abaaaaa
    aabaaaa
    2
    abcdefg
    abclmno
    0
    
    예상 출력
    The highest possible quality is 1/3.
    The highest possible quality is 1/4.