QOJ.ac

QOJ

時間限制: 1.0 s 記憶體限制: 1024 MB 總分: 100 可 Hack ✓

#18163. Digits

统计

Jayden 是一个对数字着迷的数学迷!他最喜欢的数字是一个 $m$ 位的字符串 $x$。Ziv 给了他另外 $n$ 个 $m$ 位的字符串 $v[1], v[2], \dots, v[n]$。这些字符串(包括 $x$)中的所有数位都在 $0$ 到 $k - 1$ 的范围内,其中 $k$ 是一个给定的整数($2 \le k \le 10$)。设 $v[i][j]$ 表示 $v[i]$ 从左往右数第 $j$ 个数位。

由于 Jayden 非常喜欢他最喜欢的数字 $x$,他希望使用一台数字转换机,将 Ziv 给他的所有 $n$ 个数字都转换为数字 $x$。对 $v[i]$ 进行的一次操作如下:

  • 选择两个整数 $l$ 和 $r$,满足 $1 \le l \le r \le m$。
  • 对于每个 $l \le j \le r$,将 $v[i][j]$ 的值设为 $(v[i][j] + a[j]) \bmod k$。

其中 $a$ 是一个给定的长度为 $m$ 的数组。$p \bmod q$ 表示 $p$ 除以 $q$ 的余数(例如,$5 \bmod 2 = 1$)。

此操作的代价为 $c[l] + c[r]$ 元(特别地,如果 $l = r$,代价为 $c[l] + c[l]$),其中 $c$ 是一个给定的长度为 $m$ 的数组。有关更多细节,请参考样例。

对于每个 $v[i]$,请帮助 Jayden 独立解决以下问题:

  • 使用任意次数的操作,将 $v[i]$ 转换为数字 $x$ 所需的最小总代价(以元为单位)是多少?

如果无法将 $v[i]$ 转换为 $x$,则输出 $-1$。

输入格式

你的程序必须从标准输入中读取。

输入的第一行包含三个空格分隔的整数 $n$,$m$ 和 $k$。

输入的第二行包含 $m$ 个空格分隔的整数 $a[1], a[2], \dots, a[m]$。

输入的第三行包含 $m$ 个空格分隔的整数 $c[1], c[2], \dots, c[m]$。

输入的第四行包含一个整数 $x$。

接下来的 $n$ 行,每行包含一个整数。其中第 $i$ 行包含 $v[i]$。

输出格式

你的程序必须输出到标准输出。

输出应包含 $n$ 行,每行包含一个整数。其中第 $i$ 行应包含将 $v[i]$ 转换为 $x$ 所需的最小总代价。如果这是不可能的,则输出 $-1$。

子任务

对于所有测试用例,输入将满足以下范围:

  • $1 \le n \le 200\,000$
  • $1 \le m \le 5$
  • $2 \le k \le 10$
  • $1 \le a[i] \le k - 1$ 对于所有 $1 \le i \le m$
  • $1 \le c[i] \le 10^9$ 对于所有 $1 \le i \le m$
  • $x, v[1], v[2], \dots, v[n]$ 均为 $m$ 位字符串,其中每个数位的范围在 $0$ 到 $k - 1$ 之间(含两端)。它们可能包含前导零。

你的程序将在满足以下限制的输入实例上进行测试:

子任务 分值 附加限制
0 0 样例测试用例
1 5 $m = 1$ 且对于所有 $1 \le i \le m$,$a[i] = 1$
2 13 $m = 2$ 且对于所有 $1 \le i \le m$,$a[i] = 1$
3 10 $k = 2$ 且 $c[1] = c[2] = \dots = c[m]$
4 16 $c[1] = c[2] = \dots = c[m]$
5 24 $n \le 20$
6 32 无附加限制

样例

输入样例 1

6 3 8
1 2 3
3 1 4
676
356
431
676
767
133
715

输出样例 1

16
42
0
-1
25
37

说明 1

Jayden 最喜欢的数字是 $x = 676$。

考虑 $v[1] = 356$。以下由 3 步操作组成的序列可以将 $356$ 转换为 $676$:

$$356 \xrightarrow{l=1, r=2} 476 \xrightarrow{l=1, r=1} 576 \xrightarrow{l=1, r=1} 676$$

  1. $l = 1, r = 2$:第 1 位和第 2 位分别变为 $(3 + 1) \bmod 8 = 4$ 和 $(5 + 2) \bmod 8 = 7$。这花费 $c[1] + c[2] = 3 + 1 = 4$ 元。
  2. $l = 1, r = 1$:第 1 位变为 $(4 + 1) \bmod 8 = 5$。这花费 $c[1] + c[1] = 3 + 3 = 6$ 元。
  3. $l = 1, r = 1$:第 1 位变为 $(5 + 1) \bmod 8 = 6$。这花费 $6$ 元。

这三次操作的总代价为 $4 + 6 + 6 = 16$ 元。可以证明,不存在其他代价更低的操作序列。

对于 $v[3] = 676$,由于该数字已经等于 $x$,因此不需要进行任何操作。因此,最小总代价为 $0$ 元。

对于 $v[4] = 767$,可以证明不存在任何操作序列可以将 $767$ 转换为 $676$。因此,输出 $-1$。

输入样例 2

3 4 2
1 1 1 1
1 1 1 1
1001
1110
1100
0110

输出样例 2

2
4
2

输入样例 3

1 1 10
1
67
6
7

输出样例 3

1206

输入样例 4

1 2 10
1 1
1 1000000000
24
83

输出样例 4

1000000007

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.