QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 1024 MB Total points: 15

#5760. 短信愤怒

Statistics

故事背景

Loony 教授是我的一位挚友,他怒气冲冲地闯进我的办公室,满脸通红。他开口的第一句话就是:“该死的手机制造商!我刚才想发条短信,结果光是输入一行字就花了我十多分钟。” 我试图让他冷静下来。“怎么了?为什么会花这么长时间?” 他继续说道:“你没看出来吗?!他们对字母的布局简直是一团糟!为什么 's' 是它所在按键上的第 4 个字母?还有 'e'?为什么它不是按键上的第一个字母?为了输入一个 's',我竟然要按 4 次 '7'?这简直是疯了!”

“冷静点,我的朋友,” 我说,“这种方案已经沿用很久了,甚至在短信发明之前就存在了。他们不得不保持这种布局。”

“那不是借口,” 他的脸变得越来越红,“是时候改变这一切了。从一开始这就是个愚蠢的主意。既然我们要改,为什么他们只在 8 个按键上放字母?为什么不把 12 个按键都用上?而且为什么它们必须是连续的?”

“嗯……我……不知道,” 我回答道。

“好了,就这样。那些人显然是不称职的。我相信一定有人能想出更好的方案。”

我看得出来,他就是那种只会抱怨问题却从不尝试去解决它的人。

在本题中,你需要设计一种最优的按键字母布局,以最小化输入一条消息所需的按键次数。给定按键的数量、每个按键最多能放置的字母数量、字母表中的字母总数,以及每种字母在消息中出现的频率。字母可以放置在任何按键的任何位置,且顺序不限。每个字母只能出现在一个按键上。此外,字母表中的字母数量可能超过 26 个(它不是英语)。

作为参考,目前的手机键盘布局如下:

key 2: abc
key 3: def
key 4: ghi
key 5: jkl
key 6: mno
key 7: pqrs
key 8: tuv
key 9: wxyz

第一次按下按键会输入该按键上的第一个字母。随后每按一次,都会切换到下一个字母。例如,要输入单词 "snow",你需要按 4 次 "7",接着按 2 次 "6",再按 3 次 "6",最后按 1 次 "9"。总按键次数为 10。

输入格式

输入文件的第一行包含测试用例的数量 $N$。接下来是 $N$ 个测试用例。每个用例包含两行。第一行包含每个按键最多能放置的字母数量 $P$、可用按键的数量 $K$ 以及字母表中的字母数量 $L$,均由空格分隔。第二行包含 $L$ 个非负整数。每个数字代表相应字母的频率。第一个数字表示第一个字母的使用次数,第二个数字表示第二个字母的使用次数,依此类推。

输出格式

对于每个用例,你应该输出以下内容:

Case #x: [minimum number of keypad presses]

其中包含为最优布局输入消息所需的按键次数。

数据范围

时间限制:1 秒。

内存限制:1GB。

$P \times K \ge L$

$0 \le$ 每个字母的频率 $\le 1000000$

小数据(测试集 1 - 可见;5 分)

$1 \le N \le 10$

$1 \le P \le 10$

$1 \le K \le 12$

$1 \le L \le 100$

大数据(测试集 2 - 隐藏;10 分)

$1 \le N \le 100$

$1 \le P \le 1000$

$1 \le K \le 1000$

$1 \le L \le 1000$

样例

样例输入 1

2
3 2 6
8 2 5 2 4 9
3 9 26
1 1 1 100 100 1 1 1 1 1 1 1 1 1 1 1 1 10 11 11 11 11 1 1 1 100

样例输出 1

Case #1: 47
Case #2: 397

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.