#P2200. A Card Trick

A Card Trick

题目描述

以下是一个由魔术师和她的助手进行的纸牌魔术。助手让一位观众从一副 52 张牌(梅花、方块、红心、黑桃的 A、2、3、4、5、6、7、8、9、10、J、Q、K)中选择 5 张牌。助手将其中一张牌返回给观众,然后将剩下的牌一张一张地交给魔术师。在进行一些神秘的操作后,魔术师能够识别出观众手中的(第五张)牌。

魔术师按照以下方式确定这张牌:

  1. 牌在牌堆中的顺序首先由牌值决定,对于牌值相同的牌再由花色决定(顺序如上述给出)。所以牌的完整顺序是:AC,AD,AH,AS,2C,,KH,KSAC, AD, AH, AS, 2C, \cdots, KH, KS
  2. 记住第一张牌的花色和牌值。
  3. 在剩下的三张牌中找到最小的牌(按照上述顺序)的位置(位置为 1、2 或 3),将这个位置值加到第一张牌的牌值上。
  4. 如果最后三张牌中较大的两张牌顺序不对,就在步骤 2 的结果上加 3。
  5. 缺失的牌与第一张牌花色相同,牌值为步骤 3 计算得到的值(如果需要则循环计算)。

例如: 输入牌为 QH,10D,10C,4DQH, 10D, 10C, 4D。 最后三张牌中最小的牌是 4D4D,位置为 3。10D10D10C10C 顺序不对,所以在 QQ 的牌值上加上 3+33 + 3。循环计算后,缺失的牌是 5H5H

这个问题是编写一个程序来实现助手的功能。

输入

输入的第一行是一个正整数 nn,表示后面数据集的数量。接下来的 nn 行,每行是一个数据集。每个数据集是由 5 张牌组成的序列,牌之间用空格分隔。每张牌由一个或两个字符表示牌值,一个字符表示花色,如第一段所述。

输出

对于每个数据集,在单独的行上输出 5 张输入牌的一种排序,格式如示例输出所示。序列中的第一张牌是返回给观众的牌。剩下的牌是交给魔术师的牌(按照交给魔术师的顺序)。对于一些问题可能有多个解(但不是说一定有)。在这种情况下,输出最小的解,按照上述给出的牌的顺序来确定顺序。对于下面的第一个示例,10D4DQH10C5H10D 4D QH 10C 5H 也是一个解,但 5HQH10D10C4D<10D4DQH10C5H5H QH 10D 10C 4D < 10D 4D QH 10C 5H

2						
4D 5H 10C 10D QH			
7H 5C KS 6C 8D 
Problem 1: 5H QH 10D 10C 4D
Problem 2: 6C 5C 7H 8D KS

来源

太平洋西北地区 2004 年