QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 256 MB Total points: 100

#5621. 曼卡拉棋

Statistics

Mancala 是一类在世界各地流行的棋盘游戏,有时被称为播棋(sowing games)或计数与捕获(count-and-capture)游戏,这描述了游戏的玩法。一个简单的变体是名为 Tchoukaillon 的单人游戏,由 Véronique Gautheron 描述。Tchoukaillon 在一个棋盘上进行,棋盘上有任意数量的编号为 $1, 2, \dots$ 的格子,分别包含 $b[1], b[2], \dots$ 个棋子,左侧有一个额外的空槽,称为 Roumba

单次操作包括选择一个格子 $n$,使得 $b[n] = n$(如上图中深色圆圈所示),并将该格子中的棋子逐个分发到左侧的格子中,包括 Roumba(如上图所示,得到下一张图)。如果没有格子满足 $b[n] = n$,则该棋盘为失败棋盘。

如果存在一系列操作,可以将初始棋盘分布变为每个棋子都在 Roumba 中的状态,则该初始分布称为可赢棋盘。在上面的例子中,$0, 1, 3, \dots$ 是一个可赢棋盘(“...”表示编号大于 $3$ 的所有格子包含 $0$ 个棋子)。对于每个总棋子数,存在唯一的棋子分布使得棋盘可赢(因此 $0, 1, 3, \dots$ 是唯一具有 $4$ 个棋子的可赢棋盘)。

编写一个程序,找出给定总棋子数对应的可赢棋盘。

输入格式

输入的第一行包含一个整数 $P$ ($1 \le P \le 1000$),表示随后数据组的数量。每组数据应独立处理。

每组数据由单行输入组成。它包含数据组编号 $K$,后跟一个空格,再后跟要查找的可赢棋盘的总棋子数 $N$ ($1 \le N \le 2000$)。

输出格式

对于每组数据,输出多行。输出的第一行包含数据组编号 $K$,后跟一个空格,再后跟最后一个非零棋子数的格子索引 $B$。输入保证 $B$ 不会超过 $80$。对于每组数据,输出的后续行包含格子计数 $b[1], b[2], \dots, b[B]$,每行 $10$ 个,以单个空格分隔。

样例

样例输入 1

3
1 4
2 57
3 500

样例输出 1

1 3
0 1 3
2 12
1 2 2 2 2 6 2 4 6 8
10 12
3 39
0 2 2 1 3 2 2 2 6 7
5 0 6 12 2 6 10 14 18 1
3 5 7 9 11 13 15 17 19 21
23 25 27 29 31 33 35 37 39

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.