- 0
- 0
- 约7.44千字
- 约 11页
- 2026-03-12 发布于河北
- 举报
ACM竞赛试题及答案
试题1:字符串替换与统计(基础题)
题目描述
给定一个仅包含小写字母的字符串s,以及两个长度相同的字符串a和b(a、b不含重复字符)。请将s中所有出现的a中的字符,替换为b中对应位置的字符(即a[i]对应b[i]),替换完成后,统计字符串中出现次数最多的字符及其出现次数。若有多个字符出现次数相同且最多,输出字典序最小的那个字符。
输入格式:
第一行输入字符串s(长度1≤s.length≤1e5)
第二行输入字符串a(长度1≤a.length≤26)
第三行输入字符串b(长度与a相同)
输出格式:
一行输出两个值,分别为出现次数最多的字符(字典序最小)和其出现次数,用空格分隔。
样例输入:
abcabx
ab
xy
样例输出:
y2
样例解释:替换后字符串为xycxyx,字符x出现3次?不对,重新计算:原s是abcabx,a是ab,b是xy,所以a→x,b→y,替换后是xycxyx,x出现3次,y出现2次,c出现1次,所以最多的是x,次数3?哦样例输入可能有误,修正样例输入:
修正样例输入:
abcaby
ab
xy
修正样例输出:y2(替换后为xycxyy,x出现2次,y出现3次?重新梳理:原s=abcaby→替换a→x,b→y→xycxyy→y出现3次,x出现2次,所以输出y3。此前样例输入笔误,已修正。)
答案与解析
思路分析
1.建立字符映射关系:由于a和b长度相同,且无重复字符,可用数组(下标为字符ASCII码)快速存储映射,提升查询效率(O(1)查询)。
2.字符串替换:遍历原字符串s,对每个字符,若在映射表中存在对应值,则替换,否则保留原字符。
3.统计字符出现次数:用数组(大小26,对应26个小写字母)统计替换后字符串中每个字符的出现次数。
4.寻找最优字符:遍历统计数组,记录出现次数最多的字符,若次数相同,选择字典序最小的(即ASCII码更小的)。
代码实现(C++)
cpp
#includeiostream
#includestring
#includecstring
usingnamespacestd;
intmain(){
strings,a,b;
cinsab;
//建立映射表,初始化为自身(不替换)
charmp[26];
for(inti=0;i26;++i){
mp[i]=a+i;
}
//填充需要替换的映射
for(inti=0;ia.size();++i){
intidx=a[i]-a;
mp[idx]=b[i];
}
//替换字符串并统计次数
intcnt[26]={0};
for(charc:s){
charnew_c=mp[c-a];
cnt[new_c-a]++;
}
//寻找出现次数最多且字典序最小的字符
intmax_cnt=0;
charres=z+1;
for(inti=0;i26;++i){
if(cnt[i]max_cnt){
max_cnt=cnt[i];
res=a+i;
}elseif(cnt[i]==max_cnt){
if(a+ires){
res=a+i;
}
}
}
coutresmax_cntendl;
return0;
}
复杂度分析
时间复杂度:O(n+m),其中n为s的长度,m为a的长度(m≤26,可视为常数),整体复杂度O(n),满足1e5数据规模要求。
空间复杂度:O(1),仅使用固定大小的数组(映射表和统计数组),不随输入规模变化。
试题2:区间覆盖问题(贪心算法)
题目描述
给定一个长度为L的线段(起点0,终点L),以及n个区间[start_i,end_i](0≤start_i≤end_i≤L)。请选择最少数量的区间,使得这些区间能够完全覆盖整个线段[0,L]。若无法完全覆盖,输出-1。
输入格式:
第一行输入两个整数n和L(1≤n≤1e5,1≤L≤1e9)
接下来n
您可能关注的文档
最近下载
- (中级)航空油料特设维修员(四级)理论考试题(附答案).doc VIP
- GB50134-2004人民防空工程施工及验收规范.pdf VIP
- 2026年内初班试卷新疆推荐.pdf VIP
- Q/GDW 13237.1—2018 10kV架空绝缘电缆采购标准(第1部分:通用技术规范).pdf VIP
- 2024年新疆内初班数学考试卷子.docx VIP
- 综合实践认识塑料教学设计.docx VIP
- 1_2_3_4晶体的宏观对称性1.ppt VIP
- 2024年中考阅读中引用解读与对应训练(含答案).docx VIP
- 一种小型无人机低后坐挂载平台.pdf VIP
- 土肥调控对蓝莓生长与果实品质的影响及优化策略探究.docx VIP
原创力文档

文档评论(0)