蓝桥杯c/c++程序设计——接龙数组

问题描述

对于一个长度为 K的整数数列:A1,A2,...,AK我们称之为接龙数列当且仅当 Ai 的首位数字恰好等于 Ai−1的末位数字 (2≤i≤K)。

例如 12,23,35,56,61,1112,23,35,56,61,11 是接龙数列;12,23,34,5612,23,34,56 不是接龙数列,因为 56 的首位数字不等于 34 的末位数字。

所有长度为 1 的整数数列都是接龙数列。

现在给定一个长度为 N 的数列 A1,A2,...,AN请你计算最少从中删除多少个数,可以使剩下的序列是接龙序列?

输入格式

第一行包含一个整数 N。

第二行包含 N 个整数 1,2,…,A1​,A2​,…,AN​。

输出格式

一个整数代表答案。

样例输入

5
11 121 22 12 2023

样例输出

1

样例说明

删除 22,剩余 11,121,12,2023是接龙数列。

评测用例规模与约定

对于 2020% 的数据,1≤N≤20。

对于 5050% 的数据,1≤N≤10000。

对于 100100% 的数据,1≤N≤1000000,1≤Ai​≤10^9。所有 Ai​ 保证不包含前导 0

运行限制

语言最大运行时间最大运行内存
C++1s256M
C1s256M
Java2s256M
Python33s256M
PyPy33s256M
Go3s256M
JavaScript3s256M

#include <iostream>     // 包含输入输出流库
#include <cstring>      // 包含处理字符串的库
#include <algorithm>    // 包含一些算法库函数
using namespace std;

const int N=1e5+10;     // 定义常量 N = 100010

int a[N],b[N],f[N],g[N];    // 声明四个数组a、b、f、g,每个数组大小为 N

int main()
{
  int n;                // 声明变量 n
  cin>>n;               // 输入变量 n,表示接下来会有 n 个数字串

  char s[100];          // 声明字符数组 s,用于存储输入的数字串
  for(int i=0;i<n;i++)  // 循环 n 次,读取 n 个数字串
  {
    cin>>s;             // 输入数字串,将其存储在字符数组 s 中
    a[i]=s[0]-'0';      // 将数字串的首字符转换为整数,存储在数组 a 中
    b[i]=s[strlen(s)-1]-'0';  // 将数字串的末字符转换为整数,存储在数组 b 中
  }

  int mx=0;             // 声明变量 mx,用于记录最大的循环长度,初始化为 0
  for(int i=0;i<n;i++)  // 循环 n 次,处理 n 个数字串
  {
    f[i]=1;             // 将 f 数组的当前元素初始化为 1
    f[i]=max(f[i],g[a[i]]+1); // 更新 f 数组的当前元素,取 f[i] 和 g[a[i]]+1 中的较大值
    g[b[i]]=max(f[i],g[b[i]]);  // 更新 g 数组的当前元素,取 f[i] 和 g[b[i]] 中的较大值

  }

  for(int i=0;i<n;i++)  // 循环 n 次,查找最大的循环长度
  {
    mx=max(mx,f[i]);    // 更新最大循环长度 mx,取 mx 和 f[i] 中的较大值
  }

  cout<<n-mx;          // 输出修改次数,即 n 减去最大的循环长度

  return 0;            // 返回 0,表示程序运行成功
}

 

根据输入数据分析,输入的第一行是一个数字5,表示接下来要输入的数字个数。接着的一行是以空格分隔的5个数字字符串,分别是11、121、22、12和2023。下面是对这些数据进行处理的解析过程:

首先,我们定义一些变量和数组:

const int N = 100010;
int n;
int f[N], g[N];
int l[N], r[N];

  • N 是一个常量,表示数组的最大长度。
  • n 是一个整数,用于记录输入数字的个数。
  • f 和 g 是两个整数数组,用于存储计算结果。
  • l 和 r 是两个整数数组,用于存储输入数字的首位和末位。

然后,我们读取输入的数字个数:

cin >> n;

接下来,我们读取并处理每个数字字符串:

for (int i = 0; i < n; i++) {
    cin >> num;
    l[i] = num[0] - '0';
    r[i] = num[strlen(num) - 1] - '0';
}

在每次循环中,我们首先读取一个数字字符串 num,然后将其首位和末位转换为数字,并分别存储到数组 l 和 r 中。

接下来,我们进行动态规划计算和更新:

int res = 0;
for (int i = 0; i < n; i++) {
    f[i] = 1;
    f[i] = max(f[i], g[l[i]] + 1);
    g[r[i]] = max(f[i], g[r[i]]);
    res = max(res, f[i]);
}

在每次循环中,我们首先将 f[i] 初始化为1,表示以当前数字结尾的最长序列长度至少为1。

然后,我们使用状态转移方程 f[i] = max(f[i], g[l[i]] + 1) 来更新 f[i] 的值。该方程的意思是,如果存在以数字 l[i] 结尾的序列,那么可以将当前数字接在其后形成一个更长的序列。因此,我们将当前 f[i] 和 g[l[i]] + 1 的较大值赋给 f[i],以记录以当前数字结尾的最长序列长度。

接着,我们使用状态转移方程 g[r[i]] = max(f[i], g[r[i]]) 来更新 g[r[i]] 的值。该方程的意思是,如果存在以数字 r[i] 结尾的序列,那么需要更新 g[r[i]] 的值为当前的最大值,即 f[i] 和当前 g[r[i]] 的较大值。

最后,我们通过比较 res 和 f[i] 的值来更新最终结果 res,以记录整个序列中的最长不符合条件的数字的个数。

最后,我们输出结果 n - res,即不符合条件的数字的个数:

cout << n - res << endl;

以上就是根据输入数据进行解析和处理的过程分析,展示了代码的功能和执行流程。

以下是正确的执行过程:

  1. 首先,输入数字序列的长度为 5。
  2. 接着,逐个输入每个数字并提取首位数字和末位数字。
    • 对于数字 11,其首位数字和末位数字均为 1,存储在 l[0] 和 r[0] 中。
    • 对于数字 121,其首位数字为 1,末位数字为 1,存储在 l[1] 和 r[1] 中。
    • 对于数字 22,其首位数字和末位数字均为 2,存储在 l[2] 和 r[2] 中。
    • 对于数字 12,其首位数字为 1,末位数字为 2,存储在 l[3] 和 r[3] 中。
    • 最后一个数字是 2023,其首位数字为 2,末位数字为 3,存储在 l[4] 和 r[4] 中。
  3. 接着进行动态规划计算,逐个数字计算最长接龙序列长度。
    • 对于数字 11,最长接龙序列长度为 1。
    • 对于数字 121,最长接龙序列长度为 2。
    • 对于数字 22,最长接龙序列长度为 1。
    • 对于数字 12,最长接龙序列长度为 2。
    • 对于数字 2023,最长接龙序列长度为 4。 (1 -> 12 -> 22 -> 2023)
  4. 最终,通过计算最少需要删除的数的个数,得到结果为 5 - 4 = 1。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯:日期问题

目录 引言一、日期问题1.题目描述2.代码实现3.测试 二、回文日期1.题目描述2.代码实现3.测试 引言 关于这个蓝桥杯的日期问题&#xff0c;其实有一个明确的思路就感觉很简单&#xff0c;这个思路就是不用依照日期的顺序去把每一天走完&#xff0c;而是根据一个数加一&#xff…

生成模型 | 三维重建(3D reconstruction)调研及总结【20231219更新版】

本文是关于三维重建的论文调研&#xff0c;主要集中于基于图片到3d的模型&#xff0c;其中期刊会议标志如下&#xff1a; [&#x1f916; ICCV 2023 ] 1.3D综述系列 2019_Image-based 3D Object Reconstruction: State-of-the-Art and Trends in the Deep Learning Era 论文地…

树莓派,opencv,Picamera2利用舵机云台追踪人脸(PID控制)

一、需要准备的硬件 Raspiberry 4b两个SG90 180度舵机&#xff08;注意舵机的角度&#xff0c;最好是180度且带限位的&#xff0c;切勿选360度舵机&#xff09;二自由度舵机云台&#xff08;如下图&#xff09;Raspiberry CSI 摄像头 组装后的效果&#xff1a; 二、项目目标…

【K8s】4# 使用kuboard部署开源项目实战

文章目录 1.开源项目2.实战2.1.创建spring-blade命名空间2.2.导入 spring-blade 到 K8S 名称空间2.3.设置存储卷参数2.4.调整节点端口2.5.确认导入2.6.查看集群2.7.导入配置到 nacos2.8.启动微服务工作负载 3.验证部署结果3.1.Nacos3.2. web 4.问题汇总Q1&#xff1a;Nacos启动…

Blender插件-The Grove 10 树木生长动画植物插件

注意&#xff1a;Blender和The Grove的版本匹配。 亲测Blender 2.9与The Grove 10可以配合使用&#xff0c;Blender 3.6会报错&#xff0c;具体看报错记录。 一、下载 CG咖官网地址&#xff1a; Blender插件-树木生长插件植物生成插件 The Grove 10插件资产库 CSDN下载地址…

EasyExcel使用: RGB字体,RGB背景颜色,fillForegroundColor颜色对照表

EasyExcel使用: RGB字体&#xff0c;RGB背景颜色&#xff0c;fillForegroundColor颜色对照表 使用EasyExcel导出表格可能会对字体颜色和单元格背景颜色进行自定义的修改。 可以自定义字体颜色或者每个单元格的颜色 要想自定义颜色&#xff0c;需要重写CellWriteHandler接口&am…

gem5 garnet l1 l2 cache的创建与相连

gem5 garnet l1 l2 cache的创建与相连 主要就是这个图&#xff1a; 细节 我们用的是gem5/configs/deprecated/example/fs.py #fs.py 引入了上两层路径&#xff0c;也就是当前可以看到 gem5/configs/路径。 addToPath("../../")#fs.py引入了gem5/configs/ruby/Ru…

Spring Boot集成RocketMQ之消息对象序列化

以下源码基于rocketmq-spring-boot-start 2.1.1版本&#xff0c;其它版本可能会有差异 一. 前言 当我们在Spring Boot项目中集成RocketMQ后&#xff0c;只需要在配置文件(application.yml)中添加rocketmq的相关配置&#xff0c;即可使用rocketMQTemplate发送对象消息。登录Ro…

【网络技术设备安全】BGP 基础与概述-2-中转 AS 中的 IBGP 路由传递

0x01 中转 AS 中的 IBGP 路由传递 参考该图&#xff1a; 上图&#xff0c;我们模拟一个 1.0 的路由通过 AS 65101 来传递 1&#xff1a;通过图可知&#xff0c;A 与 B 之间的 Peer 为 EBGP&#xff0c;B 与 E 之间为 Peer IBGP&#xff0c;E 与 F 之间为 Peer EBGP 邻接 2&a…

1.使用 Blazor 利用 ASP.NET Core 生成第一个 Web 应用

参考 https://dotnet.microsoft.com/zh-cn/learn/aspnet/blazor-tutorial/create 1.使用vs2022创建新项目 选择 C# -> Windows -> Blzxor Server 应用模板 2.项目名称BlazorApp下一步 3.选择 .NET6.0 或 .NET7.0 或 .NET8.0 创建 4.运行BlazorApp 5.全部选择是。 信…

【CF闯关练习】—— 800分段

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;cf闯关练习 &#x1f48c;其他专栏&#xff1a; &#x1f534;每日一题 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓…

基于西门子博途电机运行时间的先起先停控制

这是我同事在2019年做的一个功能&#xff0c;基于这个功能&#xff0c;可以形成类似的其他更多的功能&#xff0c;这些功能在一些项目上的实用性还是比较强&#xff01; 1&#xff0c;控制目标博途工控人平时在哪里技术交流博途工控人社群 根据需要启动电机的数量&#xff0c…

PhysX——源码编译

从git下载源码 git主页 https://github.com/NVIDIA-Omniverse/PhysXclone地址 https://github.com/NVIDIA-Omniverse/PhysX.git源码编译 运行PhysX需要两个编译器的支持&#xff0c;CMake 3.12 或以上版本以及Python 2.7.6 版本 进入工程的 physx 目录&#xff0c;运行generate…

案例109:基于微信小程序的高校寻物平台

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

KubePi JWT 默认密钥权限绕过漏洞复现(CVE-2023-22463)

0x01 产品简介 KubePi 是一款简单易用的开源 Kubernetes 可视化管理面板。 0x02 漏洞概述 KubePi 存在权限绕过漏洞,攻击者可通过默认 JWT 密钥获取管理员权限控制整个平台,使用管理员权限操作核心的功能。 0x03 影响范围 KubePi <= 1.6.2 0x04 复现环境 FOFA: ti…

CUMT--Java复习--泛型与集合

目录 一、泛型 1、概述 2、通配符 3、有界类型 二、集合 1、概述 2、迭代器接口 三、集合类 1、Collection接口 2、List接口 3、Set接口 4、Queue接口 5、Map接口 四、集合转换 五、集合工具类 一、泛型 1、概述 从JDK5.0开始&#xff0c;Java引入泛型类型&…

微服务之服务注册与发现

服务注册发现 服务注册就是维护一个登记簿&#xff0c;它管理系统内所有的服务地址。当新的服务启动后&#xff0c;它会向登记簿交待自己的地址信息。服务的依赖方直接向登记簿要 Service Provider 地址就行了。当下用于服务注册的工具非常多 ZooKeeper&#xff0c;Consul&…

谁能更好地检测深度伪造?人还是机器?

本文将和您讨论深度伪造对社会构成的重大威胁&#xff0c;AI检测工具以及人类专家在不同方面的技术优势与劣势。 不知您是否听说过深度伪造&#xff08;Deepfakes&#xff09;这种欺诈应用&#xff1f;由它产生的各种虚假信息已威胁到了人类社会的方方面面。随着人工智能技术的…

全新揭秘:Java WebSocket全双工通信的实践与运用

全新揭秘&#xff1a;Java WebSocket全双工通信的实践与运用 一、简介何为全双工通信全双工&#xff1f;WebSocket的使用场景 二、如何使用Java实现WebSocket1&#xff0c;引用websocket相关starter2&#xff0c;启用websocket3&#xff0c;服务端代码开发4&#xff0c;群发测试…

【数字图像处理】实验四 图像分割

一、实验内容&#xff1a; 1&#xff0e; 熟悉和掌握利用Matlab工具进行数字图像的读、写、显示等数字图像处理基本步骤。 2&#xff0e; 熟练掌握各种图像分割的基本原理及方法。 3&#xff0e; 能够从深刻理解图像分割&#xff0c;并能够思考拓展到一定的应用领域。 二、实验…