传统题 1000ms 512MiB

点菜

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

点菜

题目描述

奶龙在点菜, 它指着菜单 DD, 说了一句话 SS. 其中 DD 是包含一系列的字符串的字典, 每个字符串是一道菜名. SS 是一个字符串.

老板需要根据奶龙说的话确认他点的菜, 由于大家点菜时都喜欢用简称, 如点 "鸡蛋肠粉" 时, 只需要说 "鸡蛋肠", 点 "百事可乐", 只需要说 "百事", 所以只要说出 DD 中某道菜名的前缀, 就可以认为是点了一道菜。具体地, 老板需要将字符串 SS 划分为若干段,使得每一段是 DD 中某个字符串的前缀.

对于 SS 的每个位置 ii, 有一个价格 costicost_i. 如果一道菜以 ii 结尾则需要支付 costicost_i 的价格. (costcost 可能为负值)

奶龙想知道, 他说出 SS 的前 ii 个字符后, 他需要支付的最少价格是多少. 请你对于所有 1in1 \leq i \leq n, 求出 SS 的长度为 ii 的前缀在经过老板划分后, 奶龙支付的最小代价。

输入格式

第一行包含两个整数 nnmm,表示字符串 SS 的长度和菜单 DD 中菜名的数量。

第二行是长度为 nn 的字符串 SS. 第三行包含 nn 个整数,表示每个位置的 costicost_i. 接下来 mm 行, 每行一个字符串,每个字符串为菜单中的菜名.

输出格式

输出 nn 行,共计 nn 个整数,表示奶龙说出 SS 的前 ii 位后需要支付的最少价格。 如果老板不存在方法将其划分为若干菜名的前缀,则输出 noway.

样例 #1

样例输入 #1

5 3
abcde
1 -1 -2 -3 4
abc
de
abcde

样例输出 #1

1
-1
-2
-5
2

样例 #2

样例输入 #2

5 4
abaea
1 -1 100 -3 4
ab
ac
c
b

样例输出 #2

1
-1
99
noway
noway

数据范围

100%100\% 的数据:

  • 字符串 SS 的长度 nn 满足 1n1061 \leq n \leq 10^6
  • 菜单中的菜名数量 mm 满足 1m1000001 \leq m \leq 100000,每个菜名长度不超过 nn,总长度 LL 不超过 10610^6
  • 1000costi1000-1000 \leq cost_i \leq 1000
  • 菜单 DD 中的所有菜名均为非空字符串。
  • SSDD 的字符集均为小写英文字母。

Subtask 1 10pts

  • n5000 n \leq 5000
  • m500 m \leq 500
  • 菜单的总长度 L5000L \leq 5000

Subtask 2 20pts

  • 保证菜单中每个菜名长度不超过 2020

Subtask 3 30pts

  • n50000 n \leq 50000
  • m5000 m \leq 5000
  • 菜单的总长度 L50000L \leq 50000

Subtask 4 40 pts

  • 无额外保证

[YDRS#011 + YDRB#005] 欢欢喜喜过大年 · 2025 云斗新年挑战赛

未参加
状态
已结束
规则
IOI(严格)
题目
9
开始于
2025-1-25 9:30
结束于
2025-1-28 22:30
持续时间
6 小时
主持人
参赛人数
184