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

news2025/1/17 14:11:49

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

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

相关文章

cve_2014_3120-Elasticsearch-rce-vulfocus靶场

1.背景 来源&#xff1a;ElasticSearch&#xff08;CVE-2014-3120&#xff09;命令执行漏洞复现_mvel 漏洞-CSDN博客 参考&#xff1a;https://www.cnblogs.com/huangxiaosan/p/14398307.html 老版本ElasticSearch支持传入动态脚本&#xff08;MVEL&#xff09;来执行一些复…

STM32智能家居项目esp8266上云OneNet【附源码+详细教程】

目录 一、硬件选材 二、OneNet使用教程 三、代码修改教程 四、添加数据流方法 五、项目工程&#xff08;源码元件清单教程&#xff09; 小白也能做&#xff0c;项目工程在后文可下载。 一、硬件选材 二、OneNet使用教程 拿到代码后肯定是连不上网的&#xff0c;因为源码…

pytest配置文件配置并通过allure生成报告

之前已经学习了使用pytestrequests实现各种方式的调用和一些脚本的执行&#xff0c;今天来学习下如何使用pytest.ini配置文件来管理用例的执行以及如何使用allure生成测试报告。 1.pytest.ini文件配置 在项目目录下新建pytest.ini文件&#xff0c;然后进行配置&#xff0c;pyt…

linux:centos7升级libstdc++版本到3.4.26

下载&#xff0c;解压 wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip unzip libstdc.so_.6.0.26.zip 复制到【/usr/lib64】&#xff1a; cp libstdc.so.6.0.26 /usr/lib64创建软链接 cd /usr/lib64 sln libstdc.so.6.0.26 libstdc.so.6查看一…

使用 Scapy 库编写 TCP ACK 洪水攻击脚本

一、介绍 TCP ACK洪水攻击是一种分布式拒绝服务攻击&#xff08;DDoS&#xff09;&#xff0c;攻击者通过向目标服务器发送大量伪造的TCP ACK&#xff08;确认&#xff09;数据包&#xff0c;使目标服务器不堪重负&#xff0c;无法正常处理合法请求。虽然ACK包通常用于确认接收…

问题:材料题请点击右侧查看材料问题 查看材料 #学习方法#经验分享#学习方法

问题&#xff1a;材料题请点击右侧查看材料问题 查看材料 A.Colleges may reduce their enrollment. B.Top universities become increasingly competitive. C.Universities become selective in student admission. D.Colleges invest less in academy and infrastructure…

【LLM】Dify 0.6.10 在Windows系统上本地化部署

【LLM】Dify 0.6.10 在Windows系统上本地化部署 文章目录 【LLM】Dify 0.6.10 在Windows系统上本地化部署一、参考资料二、Dify 概述1、Dify开源项目功能介绍&#xff08;RAG流水线&#xff0c;Agent工具接入&#xff0c;Prompt配置和工作流编排&#xff0c;大模型接入&#xf…

浅析嵌入式实时系统中信号量的概念

目录 概述 1. 认识信号量 1.1 定义信号量 1.2 信号量的类型 1.2.1 二值信号量 1.2.2 计数信号量 1.2.3 互斥信号量 1.2.3.1 认识互斥信号量 1.2.3.2 互斥信号量的其他特性 2 典型信号量的使用 2.1 等待和信号同步 2.2 多任务等待和信号同步 2.3 信用跟踪同步 2.…

stm32MP135裸机编程:使用USB/UART烧录程序到SD卡并从SD卡启动点亮一颗LED灯

0 参考资料 轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序.pdf STM32CubeProgrammer v2.16.0 烧录需要的二进制文件1 烧录到SD卡需要哪些文件 参考《轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序》&#xff0c;烧录需要的SD卡文件如下&#xff1a; &a…

多模态大模型思路

最近看了一篇苏神的文章&#xff0c;对多模态LLM的设计思考很有启发&#xff0c;总结如下&#xff0c;原文可参考“闭门造车”之多模态模型方案浅谈 - 科学空间|Scientific Spaces 多模态模型要解决什么问题 视频生成、文生图这些内容&#xff0c;图文混合的双模态输入输出&a…

CTF-PWN-kernel-UAF

文章目录 参考slub 分配器kmem_cache_cpukmem_cache_node[ ]冻结和解冻分配释放 fork绑核Kmalloc flag和slub隔离CISCN - 2017 - babydriver检查babtdriver_initstruct cdevalloc_chrdev_regioncdev_initownercdev_add_class_createdevice_create babyopenbabyreleasebabyreadb…

机器视觉系统-同轴光源大小选择技巧

同轴光源多用于检测光滑平面产品上的缺陷&#xff0c;同样利用上述的方法计算得出光源尺寸。 实际上&#xff0c;同轴光源可理解为没有孔的开孔面光&#xff0c;因此可等效为发光面相等的面光源&#xff0c;如下图&#xff1a; 如图所示&#xff0c;同轴光源的效果与开孔面光的…

LeetCode 算法:缺失的第一个正数c++

原题链接&#x1f517;&#xff1a;缺失的第一个正数 难度&#xff1a;困难⭐️⭐️⭐️ 题目 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输…

Gradio.NET 的简单入门使用

1、最近在网络上由发现了一个好完的东西。 2、Gradio.NET通过简单的C# Web API几行代码就可以实现一网页界面。 3、Python中也有一个Gradio&#xff0c;功能好像都差不多哦&#xff0c;不废话了&#xff0c;我们来开始实操。 4、在Visual Studio 2022 中创建一个 ASP.NET Cro…

Seq2seq、编码器解码器神经网络

目录 一、Seq2seq 简介二、编码器三、解码器四、编码器-解码器的训练 遇到看不明白的地方&#xff0c;欢迎在评论中留言呐&#xff0c;一起讨论&#xff0c;一起进步&#xff01; 需掌握的前提知识&#xff1a; LSTM、词嵌入 本文参考&#xff1a;【官方双语】编码、解码神经网…

《软件定义安全》之五:软件定义的安全架构

第5章 软件定义的安全架构 1.软件定义安全架构 安全控制平台&#xff0c;主要负责安全设备的资源池化管理、各类安全信息源的收集和分析、与客户业务系统对接&#xff0c;以及相应安全应用的策略解析和执行。 安全应用是根据特定的安全需求所开发的程序&#xff0c;它利用安全…

Mysql的InnoDB介绍

目录 show engines查看搜索殷勤&#xff0c;默认InnoDB。 Mysql为什么使用InnoDB作为默认存储引擎 InnoDB主要包括内存结构和磁盘结构 内存结构包含: 磁盘结构中包括: 为什么设计成内存结构和磁盘结构两部分 使用InnoDB存储引擎创建的表&#xff0c;对应的数据文件在哪里…

堆排序经典问题【TopK】

前言 在上文我们讲了堆排序的实现&#xff08;点此调整&#xff09;&#xff0c;我们先简单回顾一下。 在进行堆排序之前&#xff0c;需要建一个堆&#xff0c;由于排序是将堆顶数据与堆底交换&#xff0c;所以排升序建大堆&#xff0c;降序建小堆。 堆排序的代码 //向下调整…

Nginx+Tomcat负载均衡、动静分离群集方案

一、Tomcat简介 在现代 Web 服务架构中&#xff0c;Tomcat 和 Nginx 是两个至关重要的组件&#xff0c;负责处理用户请求并实现高性能的服务。本篇博客将深入探讨这些技术的原理和部署配置方法。 最初是由Sun的软件构架师詹姆斯邓肯戴维森开发。安装Tomcat后&#xff0c;安装…

一文细谈SNN的基本数学原理,LIF模型,STDP与STBP学习方法

首先本文是读完 如何看待第三代神经网络SNN&#xff1f;详解脉冲神经网络的架构原理、数据集和训练方法 原创-CSDN博客 一文通俗入门脉冲神经网络(SNN)第三代神经网络-CSDN博客 两篇文章的总结&#xff0c;文章仅用于学习。 本文主要讨论STDP和STBP方法。 我们都知道&…