CF234E Champions' League

题目描述

在今年秋天,两支俄罗斯球队进入了世界上最负盛名的足球俱乐部比赛——欧洲冠军联赛的分组赛阶段。如今,这两支球队已经在小组赛中开打,并为晋级淘汰赛而奋战。在本题中,我们关注的是抽签环节,也就是将球队分组的过程。 抽签过程如下(本题所述规则相较于现实有所简化)。假设有 $n$ 支球队参加小组赛($n$ 可以被 $4$ 整除)。这些球队应被分成若干组,每组 $4$ 支球队。我们记组数为 $m$($m = n/4$)。每支球队都有一个积分——用一个整数表示球队以往的成绩。所有球队按积分从高到低排序(所有球队的积分互不相同)。 接着形成四个“档次”,每个档次中有 $m$ 支球队:前 $m$ 支最高积分的球队进入第一档,接下来的 $m$ 支球队进入第二档,以此类推。 然后如下过程重复 $m-1$ 次。每次从每个档次依次(先第一档,再第二档,再第三档,最后第四档)随机抽取一支球队,这四支被抽到的球队组成一个新组,并从各自的档次中移除。 经过 $(m-1)$ 次该过程后,每个档次中都剩下最后一支球队,这四支球队构成最后一组。 在实际抽签中,随机抽取球队的是一些著名的退役球员等嘉宾。我们这里没有他们,因此将使用如下的伪随机数生成器。其参数为四个正整数 $x, a, b, c$。每次调用伪随机数生成器时,按以下步骤进行: - 计算 $y = (x \cdot a + b ) \bmod c$; - 用 $y$ 替换 $x$(令 $x = y$); - 返回 $x$ 作为本次生成的随机数。 符号 $\bmod$ 表示取模运算:$a \bmod b$ 的结果是 $a$ 除以 $b$ 的余数。 在抽签过程中,每次需要从一个档次中随机选出一支球队时,伪随机数生成器会生成一个随机数 $k$。当前档次中剩余的球队按照积分从高到低编号为 $0$ 到 $s-1$,$s$ 是当前档次中剩余球队数。然后选择编号为 $k \bmod s$ 的球队。 给定所有球队的名单和伪随机数生成器的参数,输出分组抽签的结果。

输入格式

第一行包含整数 $n$($4 \leq n \leq 64$,$n$ 可被 $4$ 整除)——参加分组的球队数量。 第二行包含四个用空格分隔的整数 $x, a, b, c$($1 \leq x, a, b, c \leq 1000$)——伪随机数生成器的参数。 接下来的 $n$ 行,每行描述一支球队。每行包含球队名称和积分,中间用一个空格隔开。球队名称只含大小写英文字母,长度为 $1$ 到 $20$ 个字符,球队名称互不相同。球队的积分是 $0$ 到 $1000$ 的整数,且所有球队的积分均不同。

输出格式

输出各组的分组情况。按照生成顺序输出每一组。组别按大写英文字母依次编号(从 'A' 开始)。每组内按积分从高到低输出每支球队的名称,每行一支球队。具体格式可参考样例。

说明/提示

在给定的样例中,伪随机数生成器将被调用 4 次: - $(1\cdot 3 + 1) \bmod 7 =4$, - $(4\cdot 3 + 1) \bmod 7 =6$, - $(6\cdot 3 + 1) \bmod 7 =5$, - $(5\cdot 3 + 1) \bmod 7 =2$。 由 ChatGPT 5 翻译