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

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

배

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

요약
각 행이 열 번호나 열 범위로 주어지는 N×N 보드에서 변을 공유하는 배들을 찾아, 톤수별 배의 개수를 큰 톤수부터 출력한다.
난이도

보통10점 중 7점

유형
구현, 유니온 파인드, 시뮬레이션, 배열
정답자
아직 제출이 없습니다

문제

"배" 게임의 보드는 N×N개의 칸으로 이루어져 있다. 각 칸은 어떤 배에 속하거나 비어 있을 수 있다. 배에 속한 두 칸이 변을 공유하면 두 칸은 같은 배에 속한다. 서로 다른 배의 칸들은 공통점을 갖지 않는다. 배의 톤수는 그 배에 속한 칸의 수이다.

주어진 예에서 배에 속한 칸은 검게 표시되어 있으며, 보드에는 29톤 배 하나, 7톤 배 세 개, 4톤 배 두 개, 1톤 배 세 개가 있다.

보드의 설명이 주어졌을 때 배의 개수와 각 배의 톤수를 계산하는 프로그램을 작성하시오.

입력

첫 줄에 양의 정수 N (N < 30000)이 주어진다.

다음 N개 줄 각각에는 보드의 한 행에 대한 정보가 주어지며, 왼쪽에서 오른쪽으로 배에 속한 칸들의 묶음을 다음 두 형식 중 하나로 나타낸다.

  • <칸의 열 번호>. 이 칸이 배에 속하지만 왼쪽과 오른쪽 칸은 비어 있는 경우이다.
  • <첫 칸의 열 번호>-<마지막 칸의 열 번호>. 첫 칸부터 마지막 칸까지(포함) 연속한 모든 칸이 배에 속하고, 이 묶음의 왼쪽과 오른쪽 칸은 비어 있는 경우이다.

칸 묶음은 쉼표로 구분하고, 각 줄은 세미콜론으로 끝난다. 줄에는 공백이 없다. 어떤 행에 배의 칸이 하나도 없으면 그 줄에는 세미콜론만 있다. 배의 총 개수는 1000을 넘지 않고, 어떤 배의 톤수도 1000톤을 넘지 않는다.

출력

배에 대한 정보를 출력한다. 각 줄에는 공백으로 구분된 정수 두 개가 있어야 한다. 첫 번째 수는 톤수이고, 두 번째 수는 그 톤수를 가진 배의 개수이다. 톤수는 내림차순으로 주어져야 하며, 그 톤수를 가진 배가 하나 이상 있을 때만 출력한다.

예제1

  1. 예제 1

    입력
    12
    2-4,7,9;
    1,4,11-12;
    1,4,10,12;
    1,4-8,10-12;
    1,8;
    1,3-6,8,10-12;
    1,3,5-6,8,11;
    1,8,10-12;
    1-8;
    ;
    2;
    2-4,7-10,12;
    
    예상 출력
    29 1
    7 3
    4 2
    1 3