发布时间:2026/7/18 21:05:00
CSP202409B:字符串 K 次替换查询的高效解法 今天我们来看CSP202409B. 字符串变换这道题目题意很简单给定替换函数f将某些字符替换成其它字符求执行K次替换后的结果首先我们可以想到最暴力的解法1.维护一个mapchar,char mp记录每个映射关系2.执行k轮变换每轮变换对每个字符c执行操作cmp[c]这样就得到了如下代码# include bits/stdc.h using namespace std; #define itn int #define ll long long #define ld long double #define mod 998244353 int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); string s; getline(cin,s); // 有空格用getline读取 int n; cinn; cin.ignore(); mapchar,char mp; for (char c A; c Z; c) mp[c] c; for (char c a; c z; c) mp[c] c; for (char c 0; c 9; c) mp[c] c; mp[ ] ; string temp; for(int i0;in;i) { getline(cin,temp); mp[temp[1]]temp[2]; } mp[#]#; int m; cinm; while(m--) { int k; cink; string sss; for(int i0;iss.length();i) { for (int j 0; j k; j) { if (mp[ss[i]]ss[i]) break; ss[i]mp[ss[i]]; } } coutssendl; } return 0; }我们发现暴力的解法只能得到80分考虑对解法优化对每个字符c我们记录它不断映射后的结果无非两种1.进入自环形成一条链最后一个字符满足 mp[c] c可视为一个自环。2. 进入真循环存在 mp[a] b, mp[b] c, mp[c] a 的情况即形成环。也就是说f最后一定会进入某个循环那么我们只需要对每个字符进行dfs遍历找到循环起点和环大小如果k比循环起点小那么直接找路径对应位置否则说明已经进入循环对 k 取模后映射到环上的对应字符。这样我们就得到了满分代码# include bits/stdc.h using namespace std; #define itn int #define ll long long #define ld long double #define mod 998244353 char get(char c,int k,const mapchar,char mp) { vectorchar path; // 存储从字符c开始的变换路径 setchar visited; // 记录访问过的字符 char currentc; while (visited.find(current)visited.end()) { visited.insert(current); path.push_back(current); currentmp.at(current); } int cycle_start0; // 记录循环起点 while (path[cycle_start]!current) cycle_start; if (kcycle_start) return path[k]; int remainingk-cycle_start; int cycle_lenpath.size()-cycle_start; return path[cycle_startremaining%cycle_len]; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); string s; getline(cin,s); ss.substr(1,s.length()-2); int n; cinn; cin.ignore(); mapchar,char mp; for (char c A; c Z; c) mp[c] c; for (char c a; c z; c) mp[c] c; for (char c 0; c 9; c) mp[c] c; mp[ ] ; string temp; while (n--) { getline(cin,temp); mp[temp[1]]temp[2]; } int m; cinm; while (m--) { int k; cink; string ress; for (char c:res) { cget(c,k,mp); } cout#res#endl; } return 0; }感谢阅读转载标明出处

相关新闻

2026/7/18 21:05:00

Qt +C++ OpenCV+YOLO ONNX+PyTorch 整套技术栈分层掌握标准

Qt C OpenCVYOLO ONNXPyTorch 整套技术栈分层掌握标准按岗位需求分为三层:工程落地刚需层(必须精通)、模型转换辅助层(浅会即可)、算法训练进阶层(可选精通),适配机器视觉上位机、嵌…

2026/7/18 21:05:00

新手必看:CRM系统是什么?完整概念解读指南

你是不是对CRM的认知还停留在「存客户电话号码的通讯录」? 很多刚接触CRM的职场人、中小创业者都有这个误区:花几千块买个CRM,就是为了防止销售离职带走客户。但实际上,作为企业数字化转型最核心的工具之一,CRM的价值远…

2026/7/19 4:46:29

【思考】为什么我的场景需要Agent,而不是Workflow?

随着学习的深入,我越发觉得技术的“不值钱”,在技术爆炸的时代,知道“为什么要用agent实现功能”远比“怎么实现一个agent功能”更有价值。所以我不得不停下来重新审视自己的设计和认知,在读了两篇agent领域的“圣经”&#xff08…

2026/7/19 4:46:29

Python基础语法精要:从入门到实践

1. Python基础语法精要 Python作为一门高级编程语言,其语法设计以简洁明了著称。对于初学者而言,掌握基础语法是迈向Python编程的第一步。让我们从最核心的语法元素开始剖析。 1.1 变量与数据类型 Python是动态类型语言,变量声明时无需指定…

2026/7/19 4:46:29

嵌入式Linux根文件系统构建与优化指南

1. 根文件系统基础概念解析在嵌入式Linux开发中,根文件系统(rootfs)是系统启动过程中挂载的第一个文件系统,它包含了让Linux系统正常运行所必需的所有目录结构、设备文件、配置文件、可执行程序和库文件。如果把Linux内核比作计算…

2026/7/19 4:46:29

商业航天投资指南:政策、产业链与风险分析

这次我们来看商业航天板块的市场表现。最近这个领域出现了涨停潮,多家相关公司股价大幅上涨,背后是政策支持和行业发展的双重推动。对于关注投资机会的读者来说,了解商业航天的核心驱动力、产业链布局和风险点很有必要。商业航天最值得关注的…

2026/7/19 4:46:29

Python核心模块实战:数据处理与系统交互指南

1. 常用模块学习指南:从入门到实战作为一名Python开发者,我经常被问到:"哪些模块是必须掌握的?"、"如何快速上手常用模块?"。经过多年项目实战,我发现掌握核心模块能极大提升开发效率。…

2026/7/19 0:00:15

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/19 0:00:15

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/18 16:50:29

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…