SP398 RPGAMES - Roll Playing Games

题目描述

Phil Kropotnik 是一位游戏设计师,他常常需要解决的问题之一是决定游戏中该使用哪种骰子。在许多现代游戏中,往往需要非传统的骰子,也就是那些面数不同于传统六面体的骰子。通常,Phil 会为所有骰子中的每一个选定随机面值,唯独最后一个骰子的面值需要根据特定要求来确定,以便通过所有骰子的掷出方式来达到某些特定的总和(实际上,Phil 关注的并不是概率,而是能得出给定总和的各种不同方法的数量)。目前,这个过程是手动完成的,但他希望能够实现自动化。因此,这便是你的任务。 举个例子,假设 Phil 手头有一个四面骰子,其面值分别为 1、10、15 和 20。他希望为一个新的五面骰子进行标记,以满足以下要求:a) 有 3 种方式可以得到总和 2,b) 有 1 种方式得到总和 3,c) 有 3 种方式得到总和 11,d) 有 4 种方式得到总和 16,以及 e) 有 1 种方式得到总和 26。为了满足这些要求,他需要将五面骰子的面值设为 1、1、1、2 和 6。例如,计算总和 16 时,可以通过 10 + 6 或 15 + 1,加上在第二个骰子上的三种“1”来实现,总共有 4 种不同的方法。需要注意的是,有时候他只需关注通过所有骰子掷出的部分总和(就如上例所示)。

输入格式

输入包含多组数据集。每组数据集开头是一行整数 $n$,表示已经指定的骰子数量。接下来的 $n$ 行,各行以一个整数 $f$ 开头,表示该骰子的面数,后跟 $f$ 个整数,分别表示每个面的值。每个问题实例的末尾一行形式为: $$r \ m \ v_1 \ c_1 \ v_2 \ c_2 \ v_3 \ c_3 \ \ldots \ v_m \ c_m$$ 其中,$r$ 表示未指定骰子所需的面数,$m$ 是关心的总和的种类数,$v_1, \ldots, v_m$ 代表这些总和,$c_1, \ldots, c_m$ 表示每个总和希望实现的方法数。 输入数据满足以下约束条件:$1 \leq n \leq 100$,$1 \leq f \leq 100$,$1 \leq r \leq 100$,$1 \leq m \leq 100$。 最后一组数据集后,是单独一行包含数字 0;这一行无需处理。

输出格式

对于每组数据集,输出一行。如果存在符合要求的骰子,则输出“Final die face values are”后跟 $r$ 个按升序排列的面值;若无满足条件的骰子,则输出“Impossible”。如果有多种可能的骰子选择,请选取最低面值最小的那个;如果仍有多个选择,则依次比较次低面值,依此类推。 **本翻译由 AI 自动生成**