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

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

집수리

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

요약
필요한 못을 가지고 있는 더 길거나 같은 못에 배정하거나 새로 사야 하며, 사는 못의 개수를 먼저, 그다음 총 길이를 최소화한다.
난이도

보통10점 중 5점

유형
그리디, 정렬, 투 포인터, 완전 탐색
정답자
아직 제출이 없습니다

문제

Johanna는 자기 아파트에서 집수리를 하고 있다. Johanna는 우연에 맡기는 것을 좋아하지 않아서, 집수리 중에 필요한 못의 개수를 정확히 미리 계획했다. 그녀는 총 NN개의 못이 필요하며, 길이는 x1,x2,…,xNx_1, x_2, \dots, x_N이다. 그녀의 못 상자에는 길이가 y1,y2,…,yMy_1, y_2, \dots, y_M인 MM개의 못이 있다.

Johanna가 길이 xix_i인 못이 필요할 때, xi≤yjx_i \le y_j이면 길이 yjy_j인 못을 사용할 수 있다. 더 긴 못을 필요한 길이가 될 때까지 잘라낼 수 있기 때문이다. 그러나 짧은 못 두 개를 합쳐 긴 못을 만들 수는 없고, 못 하나를 여러 번 자를 수도 없다. 못 머리는 하나뿐이기 때문이다.

집수리를 시작하기 전에 Johanna는 다음을 알고 싶어 한다.

  • 못을 몇 개 사야 하는지, 그리고
  • 사야 하는 못의 길이가 각각 얼마인지.

그녀는 가능한 한 적은 수의 못을 사고 싶어 하며, 더해서 사는 못의 총 길이도 가능한 한 짧기를 원한다.

입력

첫째 줄에 두 정수 1≤N≤151 \le N \le 15와 1≤M≤151 \le M \le 15가 주어진다. 이는 Johanna가 필요한 못의 개수와 Johanna가 가진 못의 개수이다. 둘째 줄에 NN개의 정수 1≤x1,x2,…,xN≤1001 \le x_1, x_2, \dots, x_N \le 100이 주어지며, 이는 Johanna가 필요한 못의 길이이다. 셋째 줄에 MM개의 정수 1≤y1,y2,…,yM≤1001 \le y_1, y_2, \dots, y_M \le 100이 주어지며, 이는 Johanna가 가진 못의 길이이다.

출력

프로그램은 먼저 정수 하나를 출력한다. 이는 Johanna가 사야 하는 못의 최소 개수이다. 다음 줄에는 Johanna가 사야 하는 못의 길이를 오름차순으로 출력한다.

힌트

예제 1에서 Johanna는 길이가 1313, 2828, 7777인 못 세 개만 더 채우면 된다.

예제 2에서 Johanna는 길이 1111인 못을 하나 더 사야 하고, 길이 100100인 못을 5050으로 잘라야 한다. 길이 5050인 못을 사고 길이 100100인 못을 길이 1111로 자를 수도 있지만, 그러면 더 긴 총 길이의 못을 사야 한다.

예제2

  1. 예제 1

    입력
    6 3
    64 13 45 28 82 77
    45 82 64
    
    예상 출력
    3
    13 28 77
    
  2. 예제 2

    입력
    3 2
    11 50 45
    45 100
    
    예상 출력
    1
    11