QOJ.ac

QOJ

Límite de tiempo: 1.0 s Límite de memoria: 512 MB Puntuación total: 100

#17601. POKVARENI

Estadísticas

옛날 옛적에, 유치원 선생님이 아이들을 공원으로 데려가 '망가진 전화(전화 놀이)' 게임을 했습니다. $N$명의 아이들은 각각 $1$부터 $M$까지 번호가 매겨진 동일한 $M$개의 단어 집합을 알고 있습니다. 게임은 다음과 같이 진행됩니다: 선생님이 아이들을 일렬로 세우고 첫 번째 아이에게 $1$번 단어를 속삭입니다. 그 후 첫 번째 아이는 자신이 들은 단어를 두 번째 아이에게 속삭이고, 두 번째 아이는 자신이 들은 단어를 세 번째 아이에게 속삭이는 식으로 마지막 아이까지 이어집니다. 마지막으로 마지막 아이는 자신이 들은 단어를 큰 소리로 말합니다.

그날 근처 협회에서 젊은 정보학자들이 무분별하게 큰 소리로 코딩을 하고 있었기 때문에, 아이들은 게임에 집중할 수 없었고 종종 자신에게 속삭여진 단어와는 매우 다른 단어를 들었습니다. 하지만 다음 사실은 알려져 있습니다: 특정 아이는 특정 단어를 항상 같은 방식으로 듣습니다. 즉, 아이 $D$에게 단어 $A$가 속삭여지면, 그 아이는 (마지막 순서라면 큰 소리로 말하거나, 그렇지 않다면 다음 아이에게) 자신이 어디에 있든, 누가 단어 $A$를 속삭였든 상관없이 항상 같은 단어를 전달합니다.

선생님은 재미를 위해 이 게임을 $N!$번, 즉 가능한 모든 아이들의 순서에 대해 한 번씩 반복하기로 했습니다. 선생님은 마지막 아이가 큰 소리로 말한 단어 중 정확히 $K$번 등장한 단어가 있다는 것을 알아차렸습니다. 선생님은 이것이 어떻게 가능한지 궁금해하며, 여러분에게 그러한 상황을 재구성해 달라고 부탁했습니다.

$N$과 $K$가 주어집니다. 어휘집의 크기 $M$과 그 어휘집에 포함된 단어 $X$ ($1 \le X \le M$)를 결정하고, $N$명의 아이 각각과 $M$개의 단어 각각에 대해 해당 아이가 단어를 들었을 때 전달할 단어를 결정하여, 마지막 순서의 아이가 순서 중 정확히 $K$번(총 $N!$번 중) 단어 $X$를 큰 소리로 말하도록 하십시오. 여러분의 솔루션은 선택한 어휘집의 크기에 따라 점수가 매겨지며, 어휘집이 작을수록 더 높은 점수를 받습니다. 자세한 내용은 '채점' 섹션을 참조하십시오.

입력

첫 번째 줄에는 채점 섹션의 서브태스크 번호 $P$ ($1 \le P \le 2$)가 주어지고, 두 번째 줄에는 테스트 시나리오의 수 $T$ ($1 \le T \le 10$)가 주어집니다. 시나리오들은 서로 독립적입니다. 즉, 하나의 입력 파일에 여러 테스트 케이스가 포함되어 있습니다.

이어지는 $T$개의 줄 각각에는 하나의 테스트 시나리오에 해당하는 두 정수 $N$과 $K$ ($1 \le N \le 12$, $0 \le K \le N!$)가 주어집니다.

출력

각 $T$개의 시나리오에 대해 첫 번째 줄에 $M$과 $X$ ($1 \le X \le M \le 10\,000$), 즉 어휘집의 크기와 $K$번의 게임에서 마지막 아이가 말한 단어를 출력하십시오. 이어지는 $N$개의 줄에는 각각 $M$개의 정수를 출력하십시오: $i$번째 줄의 $j$번째 숫자는 $i$번째 아이가 단어 $j$를 들었을 때 전달할 단어를 의미합니다.

채점

테스트 케이스는 두 개의 서브태스크로 나뉩니다. 각 설명을 주의 깊게 읽으십시오. 프로그램이 어떤 케이스에서든 틀리면 해당 서브태스크는 0점을 받습니다.

서브태스크 1은 총 30점이며 $1 \le N \le 7$입니다. 이 서브태스크는 0점 또는 만점을 받을 수 있습니다. 모든 케이스에서 프로그램이 정확하다는 가정하에, 유일한 추가 조건은 $M \le 10\,000$입니다.

서브태스크 2는 총 70점이며 $1 \le N \le 12$입니다. 이 서브태스크에서는 부분 점수를 받을 수 있습니다. 각 시나리오마다 알고리즘이 획득한 점수가 결정됩니다. 알고리즘은 $70 \cdot B$점을 받으며, 여기서 $B$는 서브태스크 내 모든 시나리오에 대한 최소 점수입니다. 개별 시나리오에 대한 점수 $B_S$는 다음과 같이 계산됩니다:

  • $M \le N + 1$인 경우, $B_S = 1$
  • 그렇지 않고 $M \le N + 5$인 경우, $B_S = 0.7 + 0.15 / (M - N - 1)$ ($0.7 \le B_S \le 0.85$)
  • 그렇지 않고 $M \le 5N$인 경우, $B_S = 0.5 + 0.05 \cdot (5 - M/N)$ ($0.5 \le B_S \le 0.7$)
  • 그렇지 않고 $M \le 10\,000$인 경우, $B_S = 0.5 / (\log_{10}(M / 5N) + 1)$ ($0.0 \le B_S \le 0.5$)

예제

입력 1

1
2
3 2
2 1

출력 1

3 3
2 1 3
3 2 2
1 3 2
2 1
1 1
2 2

입력 2

2
2
3 3
4 0

출력 2

6 2
1 2 3 4 5 6
6 5 4 3 2 1
2 4 1 4 3 2
2 2
1 1
1 1
1 1
1 1

참고

첫 번째 예제 설명: 첫 번째 게임에서 아이들의 순서가 $(1, 2, 3)$이라면 다음과 같은 일이 일어납니다: 선생님이 첫 번째 아이에게 단어 $1$을 속삭입니다. 그 아이는 두 번째 아이에게 단어 $2$를 속삭입니다. 두 번째 아이는 세 번째 아이에게 단어 $2$를 속삭이고, 세 번째 아이는 단어 $3$을 큰 소리로 말합니다. 또 다른 적절한 아이들의 순서는 $(3, 2, 1)$이며, 이 경우 말해진 단어는 순서대로 $1$(선생님), $1$(아이 $3$), $3$(아이 $2$), $3$(아이 $1$)입니다. 나머지 네 가지 순서에 대해서는 마지막 아이가 $3$이 아닌 다른 단어를 말합니다.

두 번째 예제 설명: 이 예제는 부분 점수가 있는 두 번째 서브태스크의 예시입니다. 첫 번째 시나리오의 경우 $N + 1 < M \le N + 5$이므로 이 결과는 $0.77$(소수점 둘째 자리 반올림)의 점수를 받습니다. 두 번째 시나리오의 경우 $M \le N + 1$이므로 이 결과는 $1$점을 받습니다. 모든 테스트 시나리오에 대해 최솟값을 취하므로, 이 솔루션은 이 예제에 대해 총점의 $0.77$배를 받게 됩니다.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.