#P13462. [GCJ 2008 #1B] Mousetrap

[GCJ 2008 #1B] Mousetrap

Description

Mousetrap 是一个单人纸牌游戏。游戏使用一副洗牌后的编号为 11KK 的牌,牌面朝下。你需要依次揭开牌堆顶的牌,然后将其放到牌堆底部,同时记录你已经揭开的牌数。如果你揭开的牌的数字与当前计数相同,则将该牌从牌堆中移除,并将计数重置。如果计数达到 K+1K+1,你就输了。如果牌堆中的牌被移除完,你就赢了。

假设你有 55 张牌,顺序为 2,5,3,1,42, 5, 3, 1, 4。你会在计数 11 时揭开 22,计数 22 时揭开 55,计数 33 时揭开 33。由于牌面数字与计数相同,你将 33 移除,并将计数重置。现在剩下 44 张牌,顺序为 1,4,2,51, 4, 2, 5。你在计数 11 时揭开 11,并将其移除(你目前做得很棒!)。继续这样操作,你会依次移除 22,然后是 44,最后是 55,最终获胜。

你希望将牌堆排列成一种方式,使你能够赢得游戏,并且以递增顺序移除所有牌。我们称这种排列为“完美”牌堆。例如,对于 44 张牌,你可以将牌堆排列为 1,4,2,31, 4, 2, 3,你会以 1,2,3,41, 2, 3, 4 的顺序移除所有牌并获胜。

Input Format

输入的第一行为测试用例数 TT。每个测试用例第一行为一个整数 KK,表示牌堆中的牌数。下一行为一个整数 nn,接着是 nn 个整数 (d1,d2,)(d_1, d_2, \ldots),表示牌堆中的索引。

Output Format

对于每个测试用例,输出一行,格式为 "Case #xx: ",后接 nn 个整数 (k1,k2,)(k_1, k_2, \ldots),其中 kik_i 表示在大小为 KK 的完美牌堆中,第 did_i 个位置上的牌的数字。输出的数字之间用空格分隔,并且每行的冒号后至少有一个空格。

2
5
5 1 2 3 4 5
15
4 3 4 7 10
Case #1: 1 3 2 5 4
Case #2: 2 8 13 4

Hint

小数据集(15 分,测试点 1 - 可见)

  • 时间限制:60 6 秒。
  • T=100T = 100
  • 1K50001 \leq K \leq 5000
  • 1n1001 \leq n \leq 100
  • 1diK1 \leq d_i \leq K

大数据集(测试点 2 - 隐藏)

  • 时间限制:180 18 秒。
  • T=10T = 10
  • 1K10000001 \leq K \leq 1000000
  • 1n1001 \leq n \leq 100
  • 1diK1 \leq d_i \leq K

由 ChatGPT 4.1 翻译