P13462 [GCJ 2008 #1B] Mousetrap
题目描述
Mousetrap 是一个单人纸牌游戏。游戏使用一副洗牌后的编号为 $1$ 到 $K$ 的牌,牌面朝下。你需要依次揭开牌堆顶的牌,然后将其放到牌堆底部,同时记录你已经揭开的牌数。如果你揭开的牌的数字与当前计数相同,则将该牌从牌堆中移除,并将计数重置。如果计数达到 $K+1$,你就输了。如果牌堆中的牌被移除完,你就赢了。
假设你有 $5$ 张牌,顺序为 $2, 5, 3, 1, 4$。你会在计数 $1$ 时揭开 $2$,计数 $2$ 时揭开 $5$,计数 $3$ 时揭开 $3$。由于牌面数字与计数相同,你将 $3$ 移除,并将计数重置。现在剩下 $4$ 张牌,顺序为 $1, 4, 2, 5$。你在计数 $1$ 时揭开 $1$,并将其移除(你目前做得很棒!)。继续这样操作,你会依次移除 $2$,然后是 $4$,最后是 $5$,最终获胜。
你希望将牌堆排列成一种方式,使你能够赢得游戏,并且以递增顺序移除所有牌。我们称这种排列为“完美”牌堆。例如,对于 $4$ 张牌,你可以将牌堆排列为 $1, 4, 2, 3$,你会以 $1, 2, 3, 4$ 的顺序移除所有牌并获胜。
输入格式
输入的第一行为测试用例数 $T$。每个测试用例第一行为一个整数 $K$,表示牌堆中的牌数。下一行为一个整数 $n$,接着是 $n$ 个整数 $(d_1, d_2, \ldots)$,表示牌堆中的索引。
输出格式
对于每个测试用例,输出一行,格式为 "Case #$x$: ",后接 $n$ 个整数 $(k_1, k_2, \ldots)$,其中 $k_i$ 表示在大小为 $K$ 的完美牌堆中,第 $d_i$ 个位置上的牌的数字。输出的数字之间用空格分隔,并且每行的冒号后至少有一个空格。
说明/提示
**小数据集(15 分,测试点 1 - 可见)**
- 时间限制:~~60~~ 6 秒。
- $T = 100$
- $1 \leq K \leq 5000$
- $1 \leq n \leq 100$
- $1 \leq d_i \leq K$
**大数据集(测试点 2 - 隐藏)**
- 时间限制:~~180~~ 18 秒。
- $T = 10$
- $1 \leq K \leq 1000000$
- $1 \leq n \leq 100$
- $1 \leq d_i \leq K$
由 ChatGPT 4.1 翻译