#P13575. [CCPC 2024 重庆站] str(list(s))

[CCPC 2024 重庆站] str(list(s))

题目背景

本题目来自仓库 https://github.com/Disposrestfully/CCPC-CQ-2024/tree/main

题目描述

Python 语言中,若将一个字符串先转换为序列 list,再转换为字符串 str 类型,可以得到一个新的字符串。以下控制台运行结果描述了这一过程。

以下我们形式化地描述从 ssstr(list(s))\text{str(list(}s)) 的变换。为了得到 str(list(s))\text{str(list(}s)),我们需要将 ss 中的每个字符 si (0i<s)s_i \ (0 \le i < |s|) 替换为使用如下规则产生的长度为 55 的字符串 ti,0ti,1ti,2ti,3ti,4t_{i,0}t_{i,1}t_{i,2}t_{i,3}t_{i,4}

  • ti,2=sit_{i,2} = s_i
  • sis_i 不是单引号 ' 时,ti,1t_{i,1}ti,3t_{i,3} 均为单引号 ' (ASCII 39),否则 ti,1t_{i,1}ti,3t_{i,3} 均为双引号 " (ASCII 34)。
  • i0i \ne 0 时,ti,0t_{i,0} 为空格 ' ' (ASCII 32),否则为左中括号 [ (ASCII 91)。
  • is1i \ne |s|-1 时,ti,4t_{i,4} 为逗号 ,(ASCII 44) ,否则为右中括号 ] (ASCII 93)。

现在,输入一个由除空白字符以外的可见字符(即 ASCII 码 33 至 126 的所有字符)构成的字符串 ss,设 s0=ss^0 = s,对于整数 i>0i>0,定义 si=str(list(si1))s^i = \text{str(list(}s^{i-1}))。再输入两个整数 kkpp,你需要对每个 0j<p0 \le j < p 求出 sks^k 中所有下标模 ppjj 的字符的 ASCII 码的和,字符串下标从 00 开始编号。若不存在下标模 ppjj 的字符,认为答案为 00。答案可能很大,你需要将答案对 (109+7)(10^9+7) 取模。

输入格式

输入的第一行一个由除空白字符以外的可见字符构成的字符串 s (1s105)s \ (1 \le |s| \le 10^5),第二行两个整数 k,p (1k,p3000)k, p \ (1 \le k,p \le 3000)

输出格式

输出一行 pp 个整数,第 (j+1)(j+1) 个整数表示 sks^k 中下标模 ppjj 的所有字符的 ASCII 码的和,对 (109+7)(10^9+7) 取模。

abc
1 16
91 39 97 39 44 32 39 98 39 44 32 39 99 39 93 0
abc
2 7
472 420 580 408 474 439 429
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
3000 3000
输出请参考 down.zip 中的 3.ans 文件

提示

样例解释:

样例 #1 的最终字符串 s1s^1 即为题目描述的 Python 控制台运行过程中的 s1

样例 #2 的最终字符串 s2s^2 即为题目描述的 Python 控制台运行过程中的 s2

样例 #3 的字符串中包含了所有除空白字符以外的可见字符。