OJ刷题——2086.AI=?、2087.剪花布条、KPM算法

2086.AI=?

题目描述

Problem - 2086

运行代码

#include <iostream>
#include <cstdio>
using namespace std;
const int N = 3005;
int main() {int n;double Ao, An;double num[N];while (cin>>n) {cin >> Ao>>An;for (int i = 1; i <= n; i++) {cin >> num[i];}double ans = (n * Ao) / (n + 1) + An / (n + 1);double k = 2.0 * n;for (int j = 1; j <= n; j++) {ans -= k * num[j] / (n + 1);k -= 2.0;}printf("%.2lf\n", ans);}return 0;
}

代码思路

2087.剪花布条

题目描述

Problem - 2087

运行代码

#include <string>  
#include <vector>  
#include <iostream>  
using namespace std;
void get_next(vector<int>& next, const string& t) {int i = 0;int j = -1;next.resize(t.size());next[0] = -1;while (i < t.size() - 1) {if (j == -1 || t[i] == t[j]) {i++;j++;next[i] = j;}else {j = next[j];}}
}
int kmp(const string& s, const string& t) {vector<int> next(t.size());get_next(next, t);int i = 0,j = 0, count = 0;while (i < s.size()) {if (j == -1 || s[i] == t[j]) {i++;j++;}else {j = next[j];}if (j == t.size()) {count++;j = 0; // 重置j以查找下一个匹配项  }}return count;
}
int main() {string s, p;while (cin >> s && s != "#" && cin >> p) {printf("%d\n", kmp(s, p));}return 0;
}

代码思路

  1. 引入头文件

    • <string>:用于处理字符串。
    • <vector>:用于动态数组。
    • <iostream>:用于输入输出。
  2. get_next 函数

    • 这个函数用于计算模式字符串t的部分匹配表(next数组或fail表)。
    • 数组next存储的是t中每个位置之前的最长公共前后缀的长度(或称为“失败函数”值)。
    • 初始时,ij分别指向t的当前位置和next表中的前一个位置。
    • t[i]t[j]相等时,ij都向后移动一位,并更新next[i]
    • 如果不匹配(或j为-1),则将j设置为next[j](即回退到最长公共前后缀的下一个位置)。
  3. kmp 函数

    • 这个函数是KMP算法的主体部分,用于在主字符串s中查找模式字符串t的出现次数。
    • 初始时,ij分别指向st的当前位置,count用于记录匹配次数。
    • s[i]t[j]相等时,ij都向后移动一位。
    • 如果不匹配,则将j设置为next[j](即回退到最长公共前后缀的下一个位置)。
    • 如果j等于t.size(),说明找到了一个完整的匹配项,此时count加1,并将j重置为0,继续在下一个位置寻找新的匹配。
    • 循环结束后返回匹配次数count
  4. main 函数

    • 使用循环读取主字符串和模式字符串,直到主字符串为#为止。
    • 对于每一对输入,调用kmp函数计算匹配次数,并使用printf输出结果。

KPM算法

KPM 算法即克努特-莫里斯-普拉特算法(Knuth-Morris-Pratt Algorithm),是一种用于在文本中查找模式字符串的字符串匹配算法。该算法通过利用模式字符串的自身特征,避免了不必要的回溯,从而提高了匹配效率。

以下是使用 KPM 算法解决字符串匹配问题的一般步骤:

  1. 构建模式字符串的前缀函数:通过对模式字符串进行预处理,计算出每个位置的前缀函数值。前缀函数值表示模式字符串在该位置之前的最长前缀和后缀的长度。
  2. 进行字符串匹配:从目标字符串的起始位置开始,依次与模式字符串进行比较。根据前缀函数的值,确定在匹配失败时模式字符串需要回溯的位置。
  3. 重复步骤 2,直到找到匹配的位置或遍历完整个目标字符串。

在使用 KPM 算法时,需要注意以下几点:

  1. 理解前缀函数的计算方法和含义,这对于正确应用算法至关重要。
  2. 注意边界情况的处理,例如模式字符串为空或目标字符串长度小于模式字符串长度等。
  3. 在实际应用中,可能需要根据具体问题进行一些优化和改进,以提高算法的性能。

KPM 算法常用于字符串匹配、文本搜索、模式识别等领域。常见的题目包括在给定的文本中查找特定模式的出现位置、计算模式的出现次数等。

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

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

相关文章

kubernetes(k8s)集群部署(2)

目录 k8s集群类型 k8s集群规划&#xff1a; 1.基础环境准备&#xff1a; &#xff08;1&#xff09;保证可以连接外网 &#xff08;2&#xff09;关闭禁用防火墙和selinux &#xff08;3&#xff09;同步阿里云服务器时间&#xff08;达到集群之间时间同步&#xff09; &…

html+CSS+js部分基础运用20

根据下方页面效果如图1所示&#xff0c;编写程序&#xff0c;代码放入图片下方表格内 图1.效果图 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" conte…

LabVIEW调用DLL时需注意的问题

在LabVIEW中调用DLL&#xff08;动态链接库&#xff09;是实现与外部代码集成的一种强大方式&#xff0c;但也存在一些常见的陷阱和复杂性。本文将从参数传递、数据类型匹配、内存管理、线程安全、调试和错误处理等多个角度详细介绍LabVIEW调用DLL时需要注意的问题&#xff0c;…

邻接矩阵深度优先遍历

深度优先遍历&#xff0c;就是一条路&#xff0c;走到底&#xff0c;然后再走下一个岔路。 下面代码就主要使用递归来进行&#xff0c;当然也可以借助栈来实现。 private void traverse(char v, boolean[] visited) {int index _getIndexOfV(v);//获取v顶点在vertexS字符数组…

Prisma数据库ORM框架学习

初始化项目 中文网站 点击快速开始,点击创建sql项目,后面一步一步往后走 这个博主也挺全的,推荐下 可以看这个页面初始化项目跟我下面是一样的,这里用得是ts,我下面是js,不需要额外的配置了 1.vscode打开一个空文件夹 2.npm init -y 初始化package.json 3.安装相关依赖 …

常用的通信协议

最近在做项目&#xff0c;用到了一些通信协议&#xff0c;这里详细整理一下相关的通信协议&#xff0c;方便以后查阅。 常用的通信协议 单工 半双工 全双工单工通信&#xff08;Simplex Communication&#xff09;半双工(Half-duplex Communication)全双工&#xff08;Full-dup…

速卖通如何放关联?

大家都知道&#xff0c;想要进行多账号操作必须一再小心&#xff0c;否则会有很大的关联风险&#xff0c;而账号关联所带来的后果是卖家绝对不能轻视的&#xff0c;严重的话会导致封号&#xff0c;这样一来自己前期的辛苦运营就全都打水漂了&#xff0c;因此防关联很重要&#…

Python框架scrapy有什么天赋异禀

Scrapy框架与一般的爬虫代码之间有几个显著的区别&#xff0c;这些差异主要体现在设计模式、代码结构、执行效率以及可扩展性等方面。下面是一些关键的不同点&#xff1a; 结构化与模块化&#xff1a; Scrapy&#xff1a;提供了高度结构化的框架&#xff0c;包括定义好的Spider…

MySQL—多表查询—小结

一、引言 前面的博客已经全部学习完了关于多表查询。接下来对多表查询进行一个小结。 &#xff08;1&#xff09;多表查询主要是讲了两个方面 多表关系 &#xff08;不管业务关系如何的复杂&#xff0c;最终多表的关系基本上可以分为三类&#xff09; "一对多"、&qu…

《Vue》系列文章目录

Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;Vue 都可以…

载波相移CPS-SPWM调制方法的simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 载波相移CPS-SPWM调制方法的simulink建模与仿真&#xff0c;载波相移PWM方法&#xff1a; 2.系统仿真结果 单极倍频 釆用 调制波 反相 法 &#xff0c; 基本调制原理为 &…

【Bazel入门与精通】 rules之属性

https://bazel.build/extending/rules?hlzh-cn#attributes Attributes An attribute is a rule argument. Attributes can provide specific values to a target’s implementation, or they can refer to other targets, creating a graph of dependencies. Rule-specifi…

大模型训练数据白皮书深度解读

摘要 随着人工智能技术的飞速发展&#xff0c;大模型在各个领域的应用日益广泛。《大模型训练数据白皮书》为我们提供了对大模型训练数据重要性的深刻理解&#xff0c;本文将深度解读白皮书的主要内容&#xff0c;探讨大模型训练数据的关键要素、面临的挑战与未来发展趋势。 …

金融量化分析开源工具:TuShare

TuShare&#xff1a;一站式金融数据解决方案&#xff0c;让量化分析触手可及- 精选真开源&#xff0c;释放新价值。 概览 TuShare&#xff0c;是Github社区上一个专为金融量化分析师和数据爱好者设计的开源工具&#xff0c;提供了从数据采集、清洗加工到数据存储的全流程服务。…

缓存更新策略中级总结

背景 看到好些人在写更新缓存数据代码时&#xff0c;先删除缓存&#xff0c;然后再更新数据库&#xff0c;而后续的操作会把数据再装载的缓存中。然而&#xff0c;这个是逻辑是错误的。试想&#xff0c;两个并发操作&#xff0c;一个是更新操作&#xff0c;另一个是查询操作…

构建大语言模型友好型网站

以大语言模型为代表的AI 技术迅速发展&#xff0c;将会影响原有信息网络的方式。其中一个明显的趋势是通过chatGPT 对话代替搜索引擎和浏览器来获取信息。 互联网时代&#xff0c;主要是通过网站&#xff08;website&#xff09;提供信息。网站主要为人类阅读的方式构建的。主要…

高通Android开关机动画踩坑简单记录

1、下面报错有可能是selinux的原因 Read-only file system 2、接着push 动画 reboot之后抓取logcat出现 以下报错。看着大概意思像是压缩格式有问题。 3、于是重新压缩一下报错没有再出现 &#xff0c;压缩格式默认是标准&#xff0c;这里必须要改成存储格式哈 4、修改之后重新…

Mysql基础 - 事务

Mysql基础 - 事务 文章目录 Mysql基础 - 事务1 事务简介2 事务操作2.1 控制事务一2.2 控制事务二 3 事务四大特性4 并发事务问题5 事务隔离级别 1 事务简介 事务是一组操作的集合&#xff0c;他是一个不可分割的工作单位&#xff0c;事务会把所有操作作为一个整体一起向系统提…

解决Vue项目Network: unavailable的问题

在vscode使用 npm run serve 运行 Vue项目时发现一个问题&#xff0c;项目只能通过Local访问而不能通过Network访问&#xff0c;终端显示如下&#xff1a; 碰到这种情况的解决方法&#xff1a;在环境变量的path中添加“C:\Windows\System32\Wbem” 1.找到“环境变量”&#xf…

Apollo9.0 PNC源码学习之Control模块(二)

前面文章&#xff1a;Apollo9.0 PNC源码学习之Control模块&#xff08;一&#xff09; 本文将对具体控制器以及原理做一个剖析 1 PID控制器 1.1 PID理论基础 如下图所示&#xff0c;PID各参数(Kp,Ki,Kd)的作用&#xff1a; 任何闭环控制系统的首要任务是要稳、准、快的响…