AT_ahc047_a [AHC047A] Lovely Language Model
题目描述
高桥有 $N$ 个喜欢的字符串。将第 $i$ 个字符串记为 $S_i$,其偏好度为 $P_i$。每个 $S_i$ 仅由 `a` 到 `f` 的小写英文字母组成。
最近,高桥对可以生成字符串的概率模型产生了兴趣。他想设计一个能以高概率生成他喜欢的字符串的**可爱语言模型(LLM)**。
该模型由 $M$ 个状态组成。为每个状态 $i$($0 \le i \le M$)分配一个由 `a` 到 `f` 中的一个小写字母组成的 $C_i$。此外,对于每对状态 $(i,j)$,定义从状态 $i$ 到状态 $j$ 的转移概率为整数 $A_{i,j}$,表示百分比值。这些值必须满足以下条件:
$$
\sum_{j = 0}^{M - 1}A_{i,j} = 100
$$
模型从状态 $0$ 开始,并在生成长度为 $L$ 的字符串后停止。生成的字符串的第一个字符是分配给状态 $0$ 的字符 $C_0$。然后,模型根据转换概率进行状态转换,依次输出分配给每个新转移状态的字符。
对于每个字符串 $S_i$,如果它在生成的字符串中作为连续子串**出现至少一次**,高桥将获得其对应的偏好度 $P_i$。你的任务是设计字符分配 $C_0,C_1,\ldots,C_{M-1}$ 和转移矩阵 $A$,使得期望总偏好度最大化。
输入格式
第一行包含三个整数 $N,M,L$。其中:
* $N$ 是字符串数量,固定 $N = 36$。
* $M$ 是模型中的状态数,固定 $M = 12$。
* $L$ 是生成的字符串的长度,固定 $L = 10^6$。
接下来的输入有 $N$ 行。对于第 $i$($0 \le i \le N - 1$)行由两个整数 $S_i$ 和 $P_i$ 组成。其中:
* 每个 $S_i$ 是由 `a` 到 `f` 的小写英文字母组成的字符串,且保证其长度满足 $6 \le |S_i| \le 12$。
* 每个偏好度 $P_i$ 是正整数且 $1 \le P_i \le 17000$。
* 所有 $S_i$ 互不相同。
输出格式
如果 $C_i$ 是分配给状态 $i$ 的字符,$A_{i,j}$ 是状态 $i$ 到状态 $j$ 的转移概率,则输出由 $M$ 行组成。对于第 $i$($0 \le i \le M - 1$)行,第一个数为 $C_i$,随后 $M$ 个数为 $A_{i,j}$($0 \le j \le M - 1$)。其中:
* 每个 $C_i$ 都必须是从 `a` 到 `f` 的小写字母之一。
* 每个 $A_{i,j}$ 必须是满足 $0 \le A_{i,j} \le 100$ 的整数,并且每个 $i$ 必须满足以下条件:
$$
\sum_{j=0}^{M-1} A_{i,j} = 100
$$
您的程序可能会输出多个解。如果输出多个解,则只使用最后一个解进行评分。您可以使用网络版的可视化工具比较多个解决方案。
[显示示例](https://img.atcoder.jp/ahc047/cHmFekjC.html?lang=ja&seed=0&output=sample)
说明/提示
### 得分
设使用设计的模型生成长度为 $L$ 的字符串时,各字符串 $S_i$ 作为连续子串**出现至少一次**的概率为 $Q_i$。此时得分计算如下:
$\mathrm{round}\left(\sum_{i=0}^{N-1} P_i \cdot Q_i\right)$
共计 150 个测试用例,各测试用例得分之和即为最终得分。若在一个或多个测试用例中出现非法输出或超时,则整个提交将被判定为 `WA` 或 `TLE`。比赛期间获得的最高分将决定最终排名,比赛结束后不进行系统测试。若多名参赛者得分相同,则不论提交时间均视为同一排名。
### 输入生成方法
$ \mathrm{rand}(L,\ U) $:在 $L$ 到 $U$ 范围内均匀随机生成整数值。
#### 字符串 $S_i$ 的生成
各 $S_i$ 的长度 $\ell_i$ 通过 $\ell_i\ =\ \mathrm{rand}(6,\ 12)$ 确定,并按以下步骤生成长度为 $\ell_i$ 的字符串:
- 从字母`a`~`f`中随机选取 $\ell_i$ 次并连接
- 允许同一字母多次出现
若生成的字符串 $S_i$ 与已生成字符串重复,则重新生成长度为 $\ell_i$ 的字符串。
#### 偏好度 $P_i$ 的生成
为每个字符串 $S_i$ 生成对应偏好度 $P_i$:
- 计算最大值 $U_i\ =\ \left\lfloor\ 1.5^{2\ \cdot\ \ell_i}\ \right\rfloor$
- 通过 $P_i\ =\ \mathrm{rand}(1,\ U_i)$ 均匀随机生成
如此独立生成 $N\ =\ 36$ 组 $(S_i,\ P_i)$ 数据。
### 工具(输入生成器/可视化工具)
- [网页版](https://img.atcoder.jp/ahc047/cHmFekjC.html?lang=ja):比本地版性能更强,支持动画显示
- [本地版](https://img.atcoder.jp/ahc047/cHmFekjC.zip):需准备[Rust语言](https://www.rust-lang.org/ja)编译环境
- [Windows预编译二进制文件](https://img.atcoder.jp/ahc047/cHmFekjC_windows.zip):若配置Rust环境困难可使用此版本
比赛期间禁止共享可视化结果或讨论解法思路,请注意。
By@[shigengxin](https://www.luogu.com.cn/user/1114046)