信息学奥赛初赛天天练-18-挑战程序阅读-最长公共子序列、字符串与数组越界的巧妙应用

PDF文档公众号回复关键字:20240601
在这里插入图片描述

1 2023 CSP-J 阅读程序2

阅读程序(程序输入不超过数组成字符串定义的范围:判断题正确填√,错误填×;除特殊说明外,判断题1.5分,选择题3分,共计40分)

源程序

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;int f(string x,string y){int m=x.size();int n=y.size();vector<vector<int>>v(m+1,vector<int>(n+1,0));for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if(x[i-1]==y[j-1]){v[i][j]=v[i-1][j-1]+1;}else{v[i][j]=max(v[i-1][j],v[i][j-1]);}}}return v[m][n];
}bool g(string x,string y){if(x.size() != y.size()){return false;}return f(x+x,y)==y.size();
}int main(){string x,y;cin>>x>>y;cout<<g(x,y)<<endl;return 0;
}

判断题

21(1.5分)f函数的返回值小于等于min(n,m)( )

22 (1.5分) f函数的返回值等于两个输入字符串的最长公共子串的长度( )

23 (1.5分)当输入两个完全相同的字符串时,g函数的返回值总是true( )

单选题

24 (3分)将第19行中的“v[m] [n]”替换为“v[n] [m]”,那么该程序( )

A 行为不变 B 只会改变输出 C 一定非正常退出 D 可能非正常退出

25 (3分)当输入为“csp-j p-jcs”时,输出为:( )

A “0” B “1” C “T” D “F”

26 当输入为“csppsc spsccp”时,输出为()

A “T” B “F” C “0” D “1”

2 相关知识点

1) 子序列

一个给定的序列的子序列,就是将给定序列中零个或多个元素去掉之后得到的结果

例如

2) 子串

给定串中任意个连续的字符组成的子序列称为该串的子串

3)最长公共子序列

一个序列即是X序列的子序列,也是Y序列的子序列,则该序列称为为X和Y的公共子序列。对于两个序列的公共子序列是不唯一的,因此,最长公共子序列顾名思义就是长度最长的公共子序列

4) 动态规划最长公共子序列长度

最长公共子序列(Longest Common Subsequence, LCS) 问题可以使用动态规划求解。

假设x[1…m]和y[1…n]是两个序列,令c[i,j]表示x[1…i]和y[1…j]的LCS长度

状态转移方程

当i=0或j=0时,c[i,j]=0;
当x[i]=y[j]时,c[i,j]=c[i-1,j-1]+1;
当x[i]!=y[j]时,c[i,j]=max(c[i,j-1],c[i-1,j])。

例如

有2个字符串,字符串1:0123456和字符串2:0346
在这里插入图片描述

5) 字符串连接

在C++中,可以使用加号+运算符或append()方法来连接字符串

#include<bits/stdc++.h>
using namespace std;
/*字符串连接string a="我爱你,",String b="中国!";string c=a+b;//a和b拼接在一起赋值给c,所以c是我爱你,中国!a.append(b);//把b拼接到a上,所以a是我爱你,中国!
*/
int main(){string a="我爱你,";string b="中国!";string c=a+b;cout<<c<<endl; //输出我爱你,中国!a.append(b);cout<<a<<endl;//输出我爱你,中国!string p="";string q="";string pp=p+p;//空字符粗拼接后还是空字符串cout<<pp.size();//空字符串的长度为0,所以输出0return 0;
}
/*
输出 
我爱你,中国!
我爱你,中国!
0
*/ 

6) 数组

数组越界

一般数组越界结果不可预测

#include<bits/stdc++.h>
using namespace std;
/*在C++中,访问数组时出现越界(即访问了不属于该数组的内存区域)不会自动导致程序崩溃。这是因为C++标准并未规定访问数组越界时应当如何反应未定义行为意味着程序的后续行为是不可预测的,可能会导致各种不确定的结果,包括程序崩溃、异常抛出、运行错误结果,  或者看似正常的行为
*/
int a[10][20]; C++
int main(){cout<<a[300][160];//可以输出 未退出 cout<<" test";//可以输出  return 0;
}

vector 数组

#include<bits/stdc++.h>
using namespace std;vector<int> a(11,1);//声明数组a并赋值1 
vector<int> b(11);//声明数组a,默认赋值0 
int main(){a.push_back(2);//在a最后一个元素后面追加2 a.push_back(4);//在a最后一个元素后面追加4 for(int i=0;i<a.size();i++){//输出a数组中每个元素 cout <<a[i]<< ' ';}cout<<endl;for(int i=0;i<b.size();i++){//输出b数组中每个元素cout <<b[i]<< ' ';C++}return 0;
}
/*
输出
1 1 1 1 1 1 1 1 1 1 1 2 4
0 0 0 0 0 0 0 0 0 0 0 
*/

vector数组越界

#include<bits/stdc++.h>
using namespace std;
int m=10,n=20;
//声明二维vector数组 默认值初始化为0 
vector<vector<int> > v(m+1,vector<int>(n+1,1));
int main(){cout<<v[n][m];//访问越界位置  程序非正常退出 cout<<"test";//上一行已非正常退出,无法输出test return 0;
}
/*
无任何输出内容 
*/

3 思路分析

判断题

21(1.5分)f函数的返回值小于等于min(n,m)( )

答案 T

分析

f函数的功能是求2个入参字符串的最长公共子序列的长度,是CSP-J必须掌握的动态规划的算法

最长公共子序列,最大值是2个字符串长度的最小值,所以答案是正确的

22 (1.5分) f函数的返回值等于两个输入字符串的最长公共子串的长度( )

答案 F

分析

f函数的功能是求2个入参字符串的最长公共子序列的长度,不是最长公共子串的长度

f函数的功能是返回最长公共子序列的长度,不是最长公共子串的长度,子序列是不连续的,字串是连续的

例如

// CSP-J-ABCD  ,   CSNJBENCH
// 上面字符串的最长公共子序列是 CJBC 长度是4
// 上面字符串的最长公共子串是 CS 长度是2

23 (1.5分)当输入两个完全相同的字符串时,g函数的返回值总是true( )

答案 T

分析

当输入2个完全相同的字符串时,最长公共子序列的长度时字符串的长度

所以g函数返回true

例如

//CSP-J和CSP-J,传入f函数时对第1个参数连接增加了1倍长度,变成CSP-JCSP-J
//所以参数为CSP-JCSP-J和CSP-J,这2个字符串的最长公共子序列是CSP-J,长度是5

单选题

24 (3分)将第19行中的“v[m] [n]”替换为“v[n] [m]”,那么该程序( )

A 行为不变 B 只会改变输出 C 一定非正常退出 D 可能非正常退出

答案 D

分析

m是n的2倍,改变行列vector会越界,程序会非正常退出

如果输入x和y都是空字符串时,m和n都是0,vector不会越界

例如

/*
CSP-J和CSP-J,传入f函数时对第1个参数连接增加了1倍长度,变成CSP-JCSP-J
所以参数为CSP-JCSP-J和CSP-J
m是10,n是5 ,所以数组是5行10列
填每行列对应数字时是按5行8列填的,取时如果交换,可能去8行去取,会出现vector越界,
vector越界会非正常退出
*/

25 (3分)当输入为“csp-j p-jcs”时,输出为:( )

A “0” B “1” C “T” D “F”

答案 B

分析

输入csp-j p-jcs时,会第1给参数csp-j自连接后变成csp-jcsp-j

可以看出p-jcs在csp-jcsp-j中

返回的最长公共子序列的长度是p-jcs的长度和第2个参数长度相等,所以输出为true或者1

所以选B

26 当输入为“csppsc spsccp”时,输出为()

A “T” B “F” C “0” D “1”

答案 D

分析

输入csppsc spsccp时,会把第1给参数csppsc自连接后变成csppsccsppsc

可以看出spsccp按顺序出现在csppsccsppsc 中

返回的最长公共子序列的长度是spsccp的长度和第2个参数长度相等,所以输出为true或者1

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

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

相关文章

Dijkstra求最短路篇二(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)

前言&#xff1a; Dijkstra算法博客讲解分为两篇讲解&#xff0c;这两篇博客对所有有难点的问题都会讲解&#xff0c;小白也能很好理解。看完这两篇博客后保证收获满满。 第一篇博客讲解朴素Dijkstra算法Dijkstra求最短路篇一(全网最详细讲解两种方法&#xff0c;适合小白)(p…

计网ppt标黄知识点整理第(2)章节——谢希仁版本、期末复习自用

物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是指具体的传输媒体。4 个特性&#xff1a; 机械特性&#xff1a;指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等。 电气特性&#xff1a;指明在接口电缆的各条线上出现…

基于Springboot驾校预约平台小程序的设计与实现(源码+数据库+文档)

一.项目介绍 系统角色&#xff1a;管理员、教练、学员 小程序(仅限于学员注册、登录)&#xff1a; 查看管理员发布的公告信息 查看管理员发布的驾校信息 查看所有教练信息、预约(需教练审核)、评论、收藏喜欢的教练 查看管理员发布的考试信息、预约考试(需管理…

2024年东北师范CCPC

文章目录 A.Paper WateringB.nIM gAMEE.Checksum A.Paper Watering 思路&#xff1a;题目说有平方和开方两种操作&#xff0c;如果这个数是平方数&#xff0c;那么它开方之后就只能开方&#xff0c;如果平方的话就重复了&#xff0c;反之就有开方和平方两种操作。 代码如下 //…

为了方便看公众号文章,我搭建了个博客,在线看公众号所有历史文章,想看哪天的文章一秒就能找到

公众号没有个网页版的文章列表&#xff0c;只能在电脑和手机客户端看&#xff0c;想看之前的历史文章只能一直往下拉&#xff0c;想找某篇文章非常费劲。 为了方便看公众号文章&#xff0c;我搭建了个博客&#xff0c;博客地址https://sushengbuhuo.github.io/blog &#xf…

通过 SFP 接口实现千兆光纤以太网通信1

基于米联客ARTIX-7 系列开发板及其开发手册。 总体实现框图如下&#xff1a; SFP 接口 SFP 信号定义如下图所示。 Tri Mode Ethernet MAC 设置 由于使用千兆通讯&#xff0c;因此将速率设为 1Gbps。如下图所示。 首先&#xff0c;由于该 IP 需要与 IP 核 1G/2.5G Ethernet …

基于IoTDB 平台的学习和研究

Apache IoTDB&#xff08;物联网数据库&#xff09;是一个针对物联网领域的高性能原生数据库&#xff0c;适用于数据管理和分析&#xff0c;并可在边缘计算和云端部署。由于它轻量级的架构、高性能和丰富的功能集&#xff0c;以及与Apache Hadoop、Spark和Flink的深度集成&…

数据管理知识体系必知的14张语境关系图

近期对数据管理知识体系中的语境关系图进行了整体学习梳理,总共有14张图,具体如下,供大家参考。应该说语境关系图和环境因素六边形图是各有侧重、互为补充关系。语境关系图是环境因素六边形图的细化,描述了每个知识领域中的细节,相当于数据管理的微观视角, 包括与人员、 …

kali中切换python版本

kali中切换python版本 在日常使用的过程中&#xff0c;可以通过一些工具来做打靶环境&#xff0c;或者工具的启动&#xff0c;都和python关联&#xff0c;而有时存在工具安装&#xff0c;或者运行的时候出现报错&#xff0c;这时候极大可能是因为我们本地的kali中python的版本不…

Android Studio | 小白如何运行别人的安卓项目

目录 Step1&#xff1a;正确地打开项目 Step2&#xff1a;AS 同步时报错 Step3&#xff1a;同步完成后启动 Step4&#xff1a;启动成功 说明&#xff1a;本文简称 Android Studio 为 AS Step1&#xff1a;正确地打开项目 重点&#xff1a;确认好项目的根目录是哪个目录&am…

进程与线程(三)

进程与线程&#xff08;三&#xff09; 进程间通信传统间的进程间通信机制无名管道无名管道的特征无名管道的创建父子进程通信测试管道的大小管道读写易出现的问题 有名管道创建有名管道有名管道的写端代码有名管道的读端代码 信号信号的特征产生信号硬件来源软件来源发送信号的…

【第1章】SpringBoot实战篇之注册接口

文章目录 前言一、代码部分1. User2.UserMapper13. UserSerivce4. UserController15. Result 二、测试1.注册2.再次注册 总结 前言 下面介绍用户注册接口。 一、代码部分 1. User package org.example.springboot3.bigevent.entity;import com.baomidou.mybatisplus.annotat…

开发板uboot与virtualbox虚拟机、windows11网络互通

环境&#xff1a;virtualbox中ubuntu22.04.4&#xff0c;开发板通过网线再经过拓展坞usb网卡跟windows11连接。连接如下&#xff1a; 1、关闭windows防火墙(重要) 2、先在VirtualBox的工具选项创建两个网络【仅主机(Host-Only)网络】和【NAT网络】 仅主机(Host-Only)网络的ip:…

Linux下Qt Creator无法输入中文(已解决)

1. 首先确保安装了搜狗输入法&#xff0c;且能正常运行。 2.克隆源码到本地。 git clone https://gitcode.com/fcitx/fcitx-qt5.git 3.检查Qt Creator版本&#xff0c;如下图所示&#xff0c;为基于Qt6的。 4. 进入源码目录&#xff0c;建立build文件夹&#xff0c;修改CMak…

css动态导航栏鼠标悬停特效

charset "utf-8"; /*科e互联特效基本框架CSS*/ body, ul, dl, dd, dt, ol, li, p, h1, h2, h3, h4, h5, h6, textarea, form, select, fieldset, table, td, div, input {margin:0;padding:0;-webkit-text-size-adjust: none} h1, h2, h3, h4, h5, h6{font-size:12px…

8、资源操作 Resource

目录 8.1、Spring Resources概述补充&#xff1a;什么是 low-level 资源&#xff1f;1. 文件系统资源2. 类路径资源3. URL资源4. 内嵌资源5. InputStream资源6. ServletContext资源示例代码结论 8.2、Resource接口8.3、Resource的实现类8.3.1、UrlResource访问网络资源1&#x…

LIO-EKF: 运行数据UrbanNav与mid360设备详细教程

一、代码连接 代码下载连接&#xff1a; YibinWu/LIO-EKF: Maybe the simplest LiDAR-inertial odometry that one can have. (github.com) 编译步骤&#xff1a; cd srcgit clone gitgithub.com:YibinWu/LIO-EKF.gitcatkin_makesource devel/setup.bash 运行步骤&#xff1a; …

java并发处理机制

在Java中&#xff0c;并发处理机制主要是通过线程来实现的。Java提供了丰富的类和接口来支持多线程编程&#xff0c;主要集中在 java.util.concurrent 包中。以下是一些关键的并发处理机制&#xff1a; 1.线程创建&#xff1a;可以通过继承 Thread 类或实现 Runnable 接口来创建…

公园【百度之星】/图论+dijkstra

公园 图论dijkstra #include<bits/stdc.h> using namespace std; typedef long long ll; typedef pair<ll,ll> pii; vector<ll> v[40005]; //a、b、c分别是小度、度度熊、终点到各个点的最短距离 ll a[40005],b[40005],c[40005],dist[40005],st[40005]; void…

java 远程调试

1.远程启动时 jdk1.8-32\jre\bin\java.exe -Dfile.encodingUTF-8 -Djava.library.pathlib -agentlib:jdwptransportdt_socket,servery,suspendn,address5005 -jar local-com.yuetai.service-0.0.1-SNAPSHOT.jar --spring.config.locationapplication.yml 2.本地调试项目连接远…