1.1题目描述
本题涉及字符包括大小写字母(A-Z
和 a-z
)、数字(0-9
)和空格共 63 种。在这个字符集合上,小 P 定义了一个字符替换函数 f(ch),表示将字符 ch 替换为 f(ch)。 例如 f(a)=b 表示将 a
替换为 b
,f(b)=0 表示将 b
替换为 0
。 进而可以将其扩展为字符串变换函数 F(s),表示对字符串 s
进行变换,将 s
中每个字符 cch 都替换为 f(ch)。
字符替换函数 f 可表示为 n 个字符对 (ch1,ch2),即 f(ch1)=ch2。
-
n 个字符对中,ch1 两两不同,即不会出现同时定义了 f(a)=b 和 f(a)=0 的情况;
-
未定义的 f(ch),可视为 f(ch)=ch,即字符 ch 保持不变;
-
函数 f 为单射,即当 ch1≠ch2 时有 f(ch1)≠f(ch2)f,例如不会同时有 f(b)=0 和 f(0)=0(
b
和0
都被替换为0
)。
现给定初始字符串 s
,试处理 m 个查询:每个查询包含一个正整数 k,询问对初始字符串 s
变换 k 次后的结果 F^k(s)。
1.2输入格式
从标准输入读入数据。
输入共 n+4 行。
输入的第一行包含一个字符串,形如 #s#
,即用两个井号字符 #
将初始字符串 s
囊括其中。
输入的第二行包含一个正整数 n,表示组成函数 ff 的字符对数;接下来 n 行每行输入一个形如 #xy#
的字符串,表示 f(x)=y。
输入的第 n+3 行包含一个正整数 m,表示查询的个数;下一行包含空格分隔的 m 个正整数 k1,k2,⋯,km,表示 m 个查询。
1.3输出格式
输出到标准输出。
输出共 m 行,依次输出 m 个查询的结果;输出时每行同样是一个形如 #s#
的字符串,即用两个井号把变换后的字符串 s
括起。
1.4样例输入
#Hello World#
6
#HH#
#e #
# r#
#re#
#oa#
#ao#
3
1 2 3
1.5样例输出
#H llarWaeld#
#HrlloeWo ld#
#Hella Warld#
1.6子任务
前 60 的测试数据保证初始字符串 s
仅包含小写字母,且输入的 n 个字符对也皆为小写字母(即保证小写字母仅会被替换为小写字母);
前 80 的测试数据保证查询数量 m≤10、变换次数 k≤100;
全部测试数据保证 0<n≤63、0<m≤10^3、0<k≤10^9 且初始字符串 s
包含不超过 100 个字符。
1.7代码展示:
/*C++::code score:80! */
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
getline(cin,s);
int n;
cin>>n;
cin.ignore();
map<char,char>mp;
for(int i=0;i<n;i++)
{
string ts;
getline(cin,ts);
mp.insert({ts[1],ts[2]});
}
// for(const auto& ele : mp)
// {
// cout<<ele.first<<":"<<ele.second<<endl;
// }
int m;
cin>>m;
vector<int> op_nums(m);
for(int i=0;i<m;i++)
{
cin>>op_nums[i];
}
for(int op : op_nums)
{
string tmp=s;
for(int i=0;i<op;i++)
{
for(char& c: tmp)
{
if(mp.find(c)!=mp.end())
{
c=mp[c];
}
}
}
cout<<tmp<<endl;
}
return 0;
}
"""
Python
score:80!
"""
#依次遍历给出的字符串,如果有的话更换value
s=list(input())
n=int(input())
#存储更换前后的字符
mydict={}
for i in range(n):
ts=list(input())
a=ts[1]
b=ts[2]
mydict[a]=b
# for key,value in mydict.items():
# print(key,value)
m=int(input())
#输出m个操作次数
mlist=[_ for _ in map(int,input().split())]
#遍历写入的操作次数
for num in mlist:
#每次步入新的操作次数前拷贝初始化的字符串
temp=s.copy()
#按照每个操作次数循环
for _ in range(num):
#遍历字符串执行替换操作
for k in range(len(temp)):
if temp[k] in mydict:
temp[k]=mydict[temp[k]]
#将字符列表转换为字符串
new_sentence="".join(temp)
print(new_sentence)