#P2037. Roll Playing Games
Roll Playing Games
描述
Phil Kropotnik 是一名游戏制作人,他经常遇到的一个问题就是决定在游戏中使用哪些骰子。在当前的许多游戏中,通常需要非传统的骰子,即面数多于或少于传统6面立方体的骰子。通常情况下,Phil 会为除最后一个骰子外的所有骰子随机选择数值,然后尝试确定最后一个骰子的具体数值,以便以特定概率(实际上,Phil 并不直接处理概率,而是处理掷出所有骰子时得到特定总和的可能组合数)得到某些总和。目前,他需要手动完成这一过程,但显然他希望将这一过程自动化。这就是你的任务。
例如,假设 Phil 从一个面值为 、、 和 的4面骰子开始,他希望确定如何标记一个5面骰子,使得:
a) 有 种方式得到总和 ,
b) 有 种方式得到总和 ,
c) 有 种方式得到总和 ,
d) 有 种方式得到总和 ,
e) 有 种方式得到总和 。
为了满足这些条件,他应该在5面骰子的面上标记数值 、、、 和 。(例如,总和 可以通过 或 得到,其中第二个骰子有三个不同的 面可选,因此总共有 种不同的方式。)
输入
输入包含多组数据。每组数据的第一行是一个整数 ,表示已指定的骰子数量。接下来的 行每行描述一个骰子,每行以一个整数 (表示骰子的面数)开头,后跟 个整数,表示每个面的数值。每组数据的最后一行格式如下:
...
其中, 是待确定骰子的面数, 是感兴趣的总和数量,、...、 是这些总和,、...、 是对应总和所需的不同组合数。
输入值满足以下约束:
,
,
,
。
所有骰子(包括已指定和待确定的骰子)的面值均为 到 之间的整数, 和 的值均为非负且严格小于 位有符号整数的最大值。
最后一组数据后是一个单独的行,包含一个 ,表示输入结束,无需处理。
输出
对于每组数据,输出一行,内容为“Final die face values are”后跟 个非降序排列的面值;如果没有满足条件的骰子,则输出“Impossible”。如果有多个骰子满足条件,选择面值最小的骰子;如果仍有多个解,则选择第二小面值最小的骰子,依此类推。
样例输入
1
4 1 10 15 20
5 5 2 3 3 1 11 3 16 4 26 1
1
6 1 2 3 4 5 6
6 3 7 6 2 1 13 1
4
6 1 2 3 4 5 6
4 1 2 2 3
3 3 7 9
8 1 4 5 9 23 24 30 38
4 4 48 57 51 37 56 31 63 11
0
样例输出
Final die face values are 1 1 1 2 6
Impossible
Final die face values are 3 7 9 9