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

news2024/11/24 15:10:53

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

解题思路

错解

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

反例:

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.coloradmin.cn/o/1626574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

六天以太坊去中心化租房平台,前端+合约源码

六天以太坊去中心化租房平台 概述项目结构合约部署运行项目功能介绍一、首页二、房东后台我的房屋我的订单上架新房屋 三、租户后台我的房屋我的订单 四、仲裁后台 下载地址 概述 六天区块链房屋租赁系统&#xff0c;采用去中心化的方式实现了房屋的租赁功能。房东可在平台上托…

第二节:反相器、与非门Verilog实现

1.反相器 module inv(A,Y);//A,Y是我的端口 input A;//定义属性 output Y; assign Y ~A;//定义输入输出关系 endmodule //testbench of inv timescale 1ns/10ps//1ns是时间单位&#xff0c;10ps为精度 module inv_tb; reg a; wire y; inv inv(.A(a),.Y(y)); initial begin a…

图片批量高效管理,轻松调整图片着色,让图片瞬间焕发新生!

在数字化时代&#xff0c;图片成为了我们生活与工作中不可或缺的一部分。然而&#xff0c;面对海量的图片资源&#xff0c;如何高效、便捷地管理并调整它们的着色&#xff0c;成为了许多人的挑战。现在&#xff0c;我们为您带来了一款全新的图片批量管理工具&#xff0c;让您轻…

【计算机系统基础读书笔记】1.1.2 冯诺依曼机基本结构

1.1.2 冯诺依曼机基本结构 冯诺依曼机基本结构如图所示&#xff1a; 模型机中主要包括&#xff1a; 主存储器&#xff1a;用来存放指令和数据&#xff0c;简称主存或内存&#xff1b; 算数逻辑部件&#xff08;Arithmetic Logic Unit&#xff0c;简称ALU&#xff09;&#x…

【数据结构】链表的中间节点

给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 Definition for singly-linked list.struct ListNode {int val;struct ListNode *next;};typedef struct ListNode ListNode; struct ListNode…

Apache RocketMQ ACL 2.0 全新升级

作者&#xff1a;徒钟 引言 RocketMQ 作为一款流行的分布式消息中间件&#xff0c;被广泛应用于各种大型分布式系统和微服务中&#xff0c;承担着异步通信、系统解耦、削峰填谷和消息通知等重要的角色。随着技术的演进和业务规模的扩大&#xff0c;安全相关的挑战日益突出&am…

python批量删除文件

python批量删除文件 1、查询与删除2、添加模块到地址中3、批量删除多个路径中不需要导出的文件 1、查询与删除 mport osdef get_files_in_folder(folder_path):files []for file in os.listdir(folder_path):if os.path.isfile(os.path.join(folder_path, file)):files.appen…

【Leetcode】vector刷题

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;Leetcode刷题 目录 1.只出现一次的数字2.杨辉三角3.删除有序数组中的重复项4.只出现一次的数字II5.只出现一次的数字III6.电话号码的字母组合 1.只出现一次的数字 题目链接&#xff1a;136.只出现一…

微信小程序自定义导航栏定位及胶囊按钮图解

在自定义小程序导航栏时&#xff0c;右上角的胶囊&#xff08;MenuButton&#xff09;在不同机型测试&#xff0c;会发现很难适配。 实测中 不同的手机&#xff0c;胶囊高度不一样、状态栏高度不一样。与模拟器显示的情况是不一样的。 由于小程序在不同的手机上顶部布局会发生…

C语言 | Leetcode C语言题解之第44题通配符匹配

题目&#xff1a; 题解&#xff1a; bool allStars(char* str, int left, int right) {for (int i left; i < right; i) {if (str[i] ! *) {return false;}}return true; } bool charMatch(char u, char v) { return u v || v ?; };bool isMatch(char* s, char* p) {in…

以太网口硬件知识分享

一、了解网口通信基本原理 实现网络通信实质上是PHY与MAC及RJ45接口实现信号传输。MAC 就是以太网控制器&#xff0c;MAC属于数据链路层&#xff0c;主要负责把数据封装成帧&#xff0c;对帧进行界定实现帧同步。对MAC地址和源MAC地址及逆行相应的处理并对错误帧进行处理。PHY…

To String的几个作用

To String的几个作用 一、Object类中toString的作用 1、在主方法中我们可以直接用toString输出对象其中的内容 2、我们需要直接输出对象中所属内容时&#xff0c;直接使用toString方法输出语句&#xff0c;输出内容不友好&#xff0c;不便于阅读 子类&#xff1a; public c…

机器学习-保险花销预测笔记+代码

读取数据 import numpy as np import pandas as pddatapd.read_csv(rD:\人工智能\python视频\机器学习\5--机器学习-线性回归\5--Lasso回归_Ridge回归_多项式回归\insurance.csv,sep,) data.head(n6) EDA 数据探索 import matplotlib.pyplot as plt %matplotlib inlineplt.hi…

Python实现飞机大战

提供学习或者毕业设计使用&#xff0c;功能基本都有&#xff0c;不能和市场上正式游戏相提比论&#xff0c;请理性对待&#xff01; 本博文将开启免费试读&#xff0c;如有您需要完整源码或者素材材料等&#xff0c;请订阅本专栏或者找博主购买&#xff01;购买后将提供源码文件…

太速科技-基于6 U VPX M.2 高带宽加固存储板

基于6 U VPX M.2 高带宽加固存储板 一、板卡概述 基于6 U VPX M.2 高带宽加固存储板&#xff0c;可以实现VPX接口的数据读写到PCI-E总线的NVME存储媒介上。采用PLX8732&#xff0c;上行链路提供带宽x16的PCI-E数据到VPX接口上&#xff1b;下行链路提供3路带宽x4的PCI-E接口…

【CSS】使用 scroll snap 实现页面的垂直大屏滚动

CSS 属性 scroll-snap-type 设置了在有滚动容器的情形下吸附至吸附点的严格程度。 scroll-snap-type 使用 scroll snap 也可以用于垂直滚动&#xff0c;全屏展示就是一个很好的例子: <main><section class"section section-1"></section><sect…

MATLAB - 机器人动力学 - 质心(Center of Mass)

系列文章目录 前言 一、用法 com centerOfMass(robot) com centerOfMass(robot,configuration) [com,comJac] centerOfMass(robot,configuration) 二、说明 com centerOfMass(robot) 计算机器人模型在原点构型处相对于基础坐标系的质心位置。com centerOfMass(robot,conf…

Linux下载及安装OpenSSL

文章目录 前言一、OpenSSL下载二、OpenSSL安装1.上传下载好的安装包到服务器2.解压3.切换目录4.配置config5.编译6.安装7.备份旧版本OpenSSL7.创建软链接8.添加OpenSSL动态链接库9.更新库缓存10.查看OpenSSL版本验证安装是否成功 前言 一般系统会自带有OpenSSL&#xff0c;我们…

用Python绘制了几张有趣的可视化图表

流程图存在于我们生活的方方面面&#xff0c;对于我们追踪项目的进展&#xff0c;做出各种事情的决策都有着巨大的帮助&#xff0c;而对于的Python而言呢&#xff0c;绘制流程图也是十分轻松的&#xff0c;今天小编就来为大家介绍两个用于绘制流程图的模块&#xff0c;我们先来…

CogVLM CogAgent模型部署

CogVLM & CogAgent 下载地址 CogVLM & CogAgent 的 Github 官方仓库&#xff1a;https://github.com/THUDM/CogVLM CogVLM & CogAge…