第十五届蓝桥杯省赛第二场C/C++B组E题【遗迹】题解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解题思路

错解

贪心:每次都移动至当前最近的对应方块上。

反例:

s = s = s= abxac

t = t = t= abac

贪心结果(下标) 0 → 1 → 0 → 4 0 \rightarrow 1 \rightarrow 0 \rightarrow 4 0104,答案为 5 5 5

正确结果(下标) 0 → 1 → 3 → 4 0 \rightarrow 1 \rightarrow 3 \rightarrow 4 0134,答案为 4 4 4

答案与逾期不符合,故贪心解法不正确。

正解

首先,我们注意到数据范围的最后一句话,数据保证随机,那么这样每个字符的数量约为 n 26 \dfrac n {26} 26n

当我们要在键盘串查找一种字符的位置时, O ( n ) O(n) O(n) 遍历效率较低,可以考虑先将字符串进行预处理,将字符 a 的下标全部存入 g [ 0 ] g[0] g[0],字符 b 的下标存入 g [ 1 ] g[1] g[1] … \dots

f [ x ] f[x] f[x] 表示当前情况下,以 s [ x ] s[x] s[x] 作为结尾字符,键盘指针指向 x x x,构成字符串的最小代价。例如,设键盘串为 a b c d e f abcdef abcdef f [ 3 ] f[3] f[3] 表示构成 a b c d abcd abcd,且最终键盘指针指向 3 3 3 的最小代价。

计算出字符串 abcc 所需要的步数时:

  • 我们可以先计算构成 a所有最短步数,键盘串中一定存在 a,设其中一个为 a 的下标为 x x x,那么 f [ x ] = 0 f[x] = 0 f[x]=0,由于 f f f 数组定义在全局,故此处在代码中不体现。
  • 接下来计算构成 ab所有最短步数,由于我们已经计算出了构成 a所有最短步数,那么我们可以暴力枚举所有 a 的位置,与所有 b 的位置,假设其中一个 a 的位置为 y y y,其中一个 b 的位置为 x x x,那么 f [ x ] = m i n ( f [ x ] , f [ y ] + a b s ( x − y ) ) f[x] = min(f[x], f[y] + abs(x - y)) f[x]=min(f[x],f[y]+abs(xy))
  • 计算所有构成 abc 的做法如上。
  • 计算所有构成 abcc 的最短步数,由于 t [ 3 ] = t [ 2 ] t[3] = t[2] t[3]=t[2],故本轮可跳过。

时间复杂度 O ( m ( n 26 ) 2 ) O(m(\dfrac n {26})^2) O(m(26n)2)

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>using namespace std;const int N = 1e3 + 10, INF = 0x3f3f3f3f;int n, m, t;
string s, str;
vector<int> g[26];
int f[N];int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin >> n >> m >> t >> s >> str;for (int i = 0; i < n; ++ i )g[s[i] - 'a'].push_back(i);for (int i = 1; i < m; ++ i ){int u = str[i] - 'a', last = str[i - 1] - 'a';if (u != last){int res = INF;bool find = false;for (auto x: g[u]){for (auto y: g[last])res = min(res, f[y] + abs(x - y));f[x] = res;if (f[x] <= t)find = true;}if (!find){cout << i << endl;return 0;}}}cout << m << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/314242.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Studio的button点击事件

xml添加onClick调用方法 public class MainActivity extends AppCompatActivity {// 创建系统时间的文本控件TextView systemTimeTextView;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activit…

店匠科技技术产品闪耀,引领新质生产力发展

在科技飞速发展的今天,新质生产力正成为推动社会进步和经济高质量发展的核心力量。店匠科技,作为一家致力于为全球B2C电商提供产品和技术解决方案的领先企业,其技术产品不仅体现了新质生产力的创新特质,更在推动电商行业转型升级中发挥了重要作用。 新质生产力,以创新为主导,摆…

使用代理绕过网站的反爬机制

最近在尝试收集一些网络指标的数据&#xff0c; 所以&#xff0c; 我又开始做爬虫了。 :) 我们在做爬虫的过程中经常会遇到这样的情况&#xff0c;最初爬虫正常运行&#xff0c;正常抓取数据&#xff0c;一切看起来都是那么的美好&#xff0c;然而一杯茶的功夫可能就会出现错误…

ElasticSearch 安装(docker)

下载安装包 阿里云链接&#xff1a; elasticSearch.exe https://www.alipan.com/s/3A356NnmWaJ 提取码: 93da 点击链接保存&#xff0c;或者复制本段内容&#xff0c;打开「阿里云盘」APP &#xff0c;无需下载极速在线查看&#xff0c;视频原画倍速播放。 安装步骤 1、首先…

C++之STL-list+模拟实现

目录 一、list的介绍和基本使用的方法 1.1 list的介绍 1.2 list的基本使用方法 1.2.1 构造方法 1.2.2 迭代器 1.2.3 容量相关的接口 1.2.4 增删查改的相关接口 1.3 关于list迭代器失效的问题 二、模拟实现list 2.1 节点类 2.2 迭代器类 2.3 主类list类 2.3.1 成员变…

Java-字符集和字符编码-roadmap

1 需求 2 接口 3 示例 4 参考资料 「烫烫屯屯锟斤拷」揭秘ASCII、GBK、UTF-8&#xff0c;B站独家&#xff0c;一听就懂_哔哩哔哩_bilibili 非常详细的字符编码讲解&#xff0c;ASCII、GB2312、GBK、Unicode、UTF-8等知识点都有_哔哩哔哩_bilibili 你懂乱码吗&#xff1f;锟斤…

【智能算法】囊状虫群算法(TSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2020年&#xff0c;S Kaur等人受到囊状虫群自然行为启发&#xff0c;提出了囊状虫群算法&#xff08;Tunicate Swarm Algorithm, TSA&#xff09;。 2.算法原理 2.1算法思想 TSA模拟了囊状虫群在导…

【Linux】:文件查看 stat、cat、more、less、head、tail、uniq、wc

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Linux深造日志 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、stat&#xff08;查看文件详细属性信息&#xff09;1.1 内容解析&#xff1a;1.2…

JavaSE字节缓冲流

欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 请回答1024的博客 关于博主&#xff1a; 我是 请回答1024&#xff0c;一个追求数学与计算的边界、时间与空间的平衡&#xff0c;0与1的延伸的后端开发者。 博客特色&#xff1a; 在我的博客中&a…

HTML中的文档声明

前言 什么是<!DOCTYPE>&#xff1f;是否需要在 HTML5 中使用&#xff1f;什么是严格模式与混杂模式&#xff1f; 文档声明概念 HTML 文档通常以文档声明开始&#xff0c;该声明的作用是帮助浏览器确定其尝试解析和显示的 HTML 文档类型。 <!DOCTYPE html>文档声…

不同交叉工具链编译程序引发的问题及解决思路

目录 一、问题描述二、应用程序使用buildroot的工具链三、lrzsz 移植使用原交叉工具链四、总结 一、问题描述 buildroot 未使用外部交叉编译工具&#xff0c;生成的文件系统运行原先的程序不能启动。解决办法&#xff1a; ①使用 buildroot的工具链 重新编译程序&#xff1b; …

从零入门区块链和比特币(第二期)

欢迎来到我的区块链与比特币入门指南&#xff01;如果你对区块链和比特币感兴趣&#xff0c;但不知道从何开始&#xff0c;那么你来对地方了。本博客将为你提供一个简明扼要的介绍&#xff0c;帮助你了解这个领域的基础知识&#xff0c;并引导你进一步探索这个激动人心的领域。…

华为云服务器windowsserver镜像部署tomcat提供外网访问

记录一下实现步骤 1.服务器中安装jdk 1.8 2.服务器中安装了mysql5.5版本 3.把tomcat8拷贝到服务器中 4.在云服务器的控制台的安全组中添加一个安全组&#xff0c;由于我tomcat默认用的8080端口 所有我还新增了一个8080端口的配置 如下图 5.虽然设置了安全组&#xff0c;但是你…

DaVinci Resolve Studio 19(达芬奇19调色剪辑)win/mac激活版

DaVinci Resolve Studio是一个结合专业的8k 编辑&#xff0c;颜色混合&#xff0c;视觉效果和音频后期制作的软件。只需点击一下&#xff0c;你就可以立即在编辑、混音、特效和音频流之间切换。此外&#xff0c;达芬奇解决(达芬奇)是一个多用户协作的解决方案&#xff0c;使编辑…

python使用opencv对图像的基本操作(2)

13.对多个像素点进行操作&#xff0c;使用数组切片方式访问 img[i,:] img[j,:] #将第j行的数值赋值给第i行 img[-2,:]或img[-2] #倒数第二行 img[:,-1] #最后一列 img[50:100,50:100] #50-100行&#xff0c;50-100列&#xff08;不包括第100行和第100列&#xff09; img[:100…

一、路由基础

1.路由协议的优先级 路由器分别定义了外部优先级和内部优先级&#xff08;越小越优&#xff09; 路由选择顺序&#xff1a;外部优先级>>内部优先级&#xff08;相同时&#xff09; ①外部优先级&#xff1a;用户可以手工为各路由协议配置的优先级 ②内部优先级&#xf…

uniapp制作分页查询功能

效果 代码 标签中 <uni-pagination change"pageChanged" :current"pageIndex" :pageSize"pageSize" :total"pageTotle" class"pagination" /> data中 pageIndex: 1, //分页器页码 pageSize: 10, //分页器每页显示…

Kubernetes学习-核心概念篇(一) 初识Kubernetes

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Kubernetes渐进式学习-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1. 前言 2. 什么是Kubernetes 3. 为什么需要Kubernetes 3.1. 应…

Java面试八股文-2024

面试指南 TMD&#xff0c;一个后端为什么要了解那么多的知识&#xff0c;真是服了。啥啥都得了解 MySQL MySQL索引可能在以下几种情况下失效&#xff1a; 不遵循最左匹配原则&#xff1a;在联合索引中&#xff0c;如果没有使用索引的最左前缀&#xff0c;即查询条件中没有包含…

ArcGIS批量寻找图层要素中的空洞

空洞指的是图层中被要素包围所形成的没有被要素覆盖的地方&#xff0c;当图层要素数量非常庞大时&#xff0c;寻找这些空洞就不能一个一个的通过目测去寻找了&#xff0c;需要通过使用工具来实现这一目标。 一、【要素转线】工具 利用【要素转线】工具可以将空洞同图层要素处于…