CF1311C.Perform the Combo
普及-
通过率:0%
时间限制:2.00s
内存限制:256MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
You want to perform the combo on your opponent in one popular fighting game. The combo is the string s consisting of n lowercase Latin letters. To perform the combo, you have to press all buttons in the order they appear in s. I.e. if s="abca" then you have to press 'a', then 'b', 'c' and 'a' again.
You know that you will spend m wrong tries to perform the combo and during the i-th try you will make a mistake right after pi-th button (1≤pi<n) (i.e. you will press first pi buttons right and start performing the combo from the beginning). It is guaranteed that during the m+1-th try you press all buttons right and finally perform the combo.
I.e. if s="abca", m=2 and p=[1,3] then the sequence of pressed buttons will be 'a' (here you're making a mistake and start performing the combo from the beginning), 'a', 'b', 'c', (here you're making a mistake and start performing the combo from the beginning), 'a' (note that at this point you will not perform the combo because of the mistake), 'b', 'c', 'a'.
Your task is to calculate for each button (letter) the number of times you'll press it.
You have to answer t independent test cases.
你想在一款流行的格斗游戏中对对手施展连招。该连招是一个长度为 n 的字符串 s,由小写拉丁字母组成。要施展该连招,你必须严格按照 s 中字符出现的顺序依次按下对应按键。例如,若 s= "abca",则你需要依次按下 'a'、'b'、'c'、'a'。
已知你在成功施展连招前会进行 m 次错误尝试;在第 i 次尝试中,你会在按下第 pi 个按键后立即出错(1≤pi<n),即你正确按下了前 pi 个按键,随后便从头开始重新施展连招。保证在第 m+1 次尝试中,你能完整且正确地按下全部按键,从而成功施展连招。
例如,若 s= "abca",m=2,且 p=[1,3],则实际按下的按键序列为:'a'(此处出错,重新开始);'a'、'b'、'c'(此处出错,重新开始);'a'(注意:此时因出错尚未完成连招)、'b'、'c'、'a'。
你的任务是:对每个按键(即每个字母),计算它在整个过程中被按下的总次数。
你需要回答 t 个相互独立的测试用例。
输入格式
The first line of the input contains one integer t (1≤t≤104) — the number of test cases.
Then t test cases follow.
The first line of each test case contains two integers n and m (2≤n≤2⋅105, 1≤m≤2⋅105) — the length of s and the number of tries correspondingly.
The second line of each test case contains the string s consisting of n lowercase Latin letters.
The third line of each test case contains m integers p1,p2,…,pm (1≤pi<n) — the number of characters pressed right during the i-th try.
It is guaranteed that the sum of n and the sum of m both does not exceed 2⋅105 (∑n≤2⋅105, ∑m≤2⋅105).
It is guaranteed that the answer for each letter does not exceed 2⋅109.
输入的第一行包含一个整数 t(1≤t≤104)—— 表示测试用例的数量。
接下来是 t 个测试用例。
每个测试用例的第一行包含两个整数 n 和 m(2≤n≤2⋅105,1≤m≤2⋅105)—— 分别表示字符串 s 的长度以及尝试次数。
每个测试用例的第二行包含一个由 n 个小写拉丁字母组成的字符串 s。
每个测试用例的第三行包含 m 个整数 p1,p2,…,pm(1≤pi<n)—— 表示第 i 次尝试中正确按下的字符数量。
保证所有测试用例的 n 之和与 m 之和均不超过 2⋅105(即 ∑n≤2⋅105,∑m≤2⋅105)。
保证每个字母对应的答案不超过 2⋅109。
输出格式
For each test case, print the answer — 26 integers: the number of times you press the button 'a', the number of times you press the button 'b', …, the number of times you press the button 'z'.
对于每个测试用例,输出答案——26 个整数:按下按钮 'a' 的次数、按下按钮 'b' 的次数、……、按下按钮 'z' 的次数。
输入输出样例
输入#1
3 4 2 abca 1 3 10 5 codeforces 2 8 3 2 9 26 10 qwertyuioplkjhgfdsazxcvbnm 20 10 1 2 3 5 10 5 9 4
输出#1
4 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 4 5 3 0 0 0 0 0 0 0 0 9 0 0 3 1 0 0 0 0 0 0 0 2 1 1 2 9 2 2 2 5 2 2 2 1 1 5 4 11 8 2 7 5 1 10 1 5 2
说明/提示
The first test case is described in the problem statement. Wrong tries are "a", "abc" and the final try is "abca". The number of times you press 'a' is 4, 'b' is 2 and 'c' is 2.
In the second test case, there are five wrong tries: "co", "codeforc", "cod", "co", "codeforce" and the final try is "codeforces". The number of times you press 'c' is 9, 'd' is 4, 'e' is 5, 'f' is 3, 'o' is 9, 'r' is 3 and 's' is 1.
第一个测试用例在题目描述中已给出。错误的尝试字符串为 "a"、"abc",最终正确的尝试字符串为 "abca"。其中字母 'a' 被按下了 4 次,'b' 被按下了 2 次,'c' 被按下了 2 次。
第二个测试用例中,共有五次错误的尝试:"co"、"codeforc"、"cod"、"co"、"codeforce",最终正确的尝试字符串为 "codeforces"。其中字母 'c' 被按下了 9 次,'d' 被按下了 4 次,'e' 被按下了 5 次,'f' 被按下了 3 次,'o' 被按下了 9 次,'r' 被按下了 3 次,'s' 被按下了 1 次。
输入解题思路,AI测评打分。不知道怎么写?