#P13385. [GCJ 2011 Finals] Ace in the Hole

    ID: 13196 远端评测题 3000~6000ms 1024MiB 尝试: 0 已通过: 0 难度: 9 上传者: 标签>贪心博弈论2011Google Code Jam

[GCJ 2011 Finals] Ace in the Hole

Description

Amy 有一副包含 NN 张牌的牌堆,牌面数值为 11NN。她将牌堆排列,使得任意长度为 33 的递减子序列都不存在。例如,1,5,4,6,3,21, 5, 4, 6, 3, 2 是非法排列,因为 5,3,25, 3, 2 构成了长度为 33 的递减子序列。

Amy 把这副牌交给了 Ben。Ben 知道这副牌没有长度为 33 的递减子序列,但他不知道具体的排列顺序。他想找到数值为 11 的那张牌。他的方法是每次任意选择一张牌,翻开查看其数值,然后重复此过程,直到找到数值为 11 的牌。每一步,Ben 都会选择能使他在最坏情况下需要查看的牌数最少的那张牌。

后来 Ben 告诉你,他运气很差,在找到数值为 11 的牌之前,不得不把 NN 张牌全部都看了一遍。给定 Ben 检查牌的顺序,请你推断每张牌的数值分别是多少。如果有多种可能,请输出字典序最大的那一种。

如果牌堆 AA 在第一个不同的位置上牌面数值大于牌堆 BB,则称 AA 的字典序大于 BB

例如:N=3N = 3,Ben 检查牌的顺序为 2,1,32, 1, 3(下标从 11 开始)。那么牌的数值排列应为:2,3,12, 3, 1

解释:如果第 22 张牌是 11,Ben 会立刻停止。如果第 22 张牌是 22,Ben 会知道第 11 张牌一定是 11,因为排列 (3,2,1)(3, 2, 1) 存在长度为 33 的递减子序列,因此不可能。因此,第 22 张牌只能是 33。同理,第 11 张牌也不能是 11,否则 Ben 会提前停止。因此,牌面数值应为 2,3,12, 3, 1

Input Format

第一行输入一个整数 TT,表示测试用例的数量。接下来有 TT 组测试数据。每组测试数据第一行包含一个整数 NN,表示牌的数量。第二行包含 NN 个用空格分隔的整数,表示 Ben 检查牌的顺序:第一个整数表示他首先检查的牌的位置(下标从 11 开始),第二个整数表示他第二次检查的牌的位置,依此类推。

Output Format

对于每个测试用例,输出一行,格式为 "Case #xx: yy",其中 xx 是测试用例编号(从 11 开始),yy 是牌面数值的排列,用空格分隔。

3
3
2 1 3
1
1
3
3 2 1
Case #1: 2 3 1
Case #2: 1
Case #3: 1 3 2

Hint

数据范围

  • 1T1001 \leq T \leq 100
  • 对于给定的 Ben 的检查顺序,至少存在一种满足所有条件(包括 Ben 必须检查 NN 张牌)的牌堆排列。

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

  • 1N81 \leq N \leq 8
  • 时间限制:3 秒。

大数据(22 分,测试点 2 - 隐藏)

  • 1N3001 \leq N \leq 300
  • 时间限制:6 秒。

由 ChatGPT 4.1 翻译