题目:斤斤计较得小Z(蓝桥OJ 2047)

news2024/11/23 0:22:14

问题描述: 


题解:

        做法一(kmp模板):

#include <bits/stdc++.h>
using namespace std;

const int N = 1e6 + 9;
char s[N], p[N];
int nex[N];

int main()
{
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

  // p: 子串  s:文本串
  cin >> p + 1;int m = strlen(p + 1);
  cin >> s + 1;int n = strlen(s + 1);

  nex[0] = nex[1] = 0;
  for(int i = 2,j = 0; i <= m; i++)
  {
    while(j && p[i] != p[j + 1])j = nex[j];
    if(p[i] == p[j + 1])j++;
    nex[i] = j;
  }

  int ans = 0;
  for(int i = 1,j = 0; i <= n; i++)
  {
    while(j && s[i] != p[j + 1])j = nex[j];
    if(s[i] == p[j + 1])j++;
    if(j == m)ans++;
  }
  cout << ans << '\n';
  return 0;
}

        做法二 (字符串hash)  :

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 9;
char s[N], p[N];
using ull = unsigned long long;
const ull base = 131;
ull h1[N], h2[N], b[N];  // h1:子串哈希  h2:文本串哈希  b[N]:b的i次方 

ull getHash(ull h[], int l, int r)  // 获取新的独一的以l开头的r结尾的r的哈希值 
{
	return h[r] - h[l - 1] * b[r - l + 1]; 
}

int main()
{
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

  // p: 子串  s:文本串
  cin >> p + 1;int m = strlen(p + 1);
  cin >> s + 1;int n = strlen(s + 1);
  b[0] = 1;
  for(int i = 1; i <= n; i++)  // 初始化 
  {
	b[i] = b[i - 1] * base;
	h1[i] = h1[i - 1] * base + (int)p[i];  // (int)p[i]:第i位的ascii值 
  	h2[i] = h2[i - 1] * base + (int)s[i];
  }
  
  int ans = 0;
  for(int i = 1; i + m - 1 <= n; i++)  // 枚举文本串的子串位置,i+m-1表示以i开头的子串的末尾,子串末尾上限到文本串末尾 
  {
  	if(getHash(h1, 1, m) == getHash(h2, i, i+m-1))ans++;
  }

  cout << ans << '\n';
  return 0;
}

知识点:kmp模板,字符串hash

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

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

相关文章

【每日刷题】Day11

【每日刷题】Day11 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; 目录 1. 860. 柠檬水找零 - 力扣&#xff08;LeetCode&#xff09; 2. 976. 三角形的最大周长 - 力扣&#xff08;LeetCode&#xff09; 3.…

--每周分享--

分享内容&#xff1a; 1.单链表的归并排序 2.一道有趣的思考题 分享细节&#xff1a; 单链表的归并排序 主要思想&#xff1a;递归 怎么理解&#xff1f;下面具体说明&#xff1a; 1.首先&#xff0c;我从整体的思考步骤说明&#xff1a;先分区&#xff0c;再排序&#…

3d里怎么让模型直接显示材质---模大狮模型网

在3D设计和渲染中&#xff0c;使模型直接显示材质是一个常见但也关键的需求。直接显示材质可以帮助设计师更直观地预览和编辑模型的外观&#xff0c;从而提高工作效率并确保最终效果符合预期。本文将介绍一些方法和技巧&#xff0c;帮助你在3D设计中实现模型直接显示材质的目标…

防火墙搭建内网 安装路由器

经典网络情况 也就是网吧 先配置网段 科普&#xff1a;子网掩码代表IP前面几位不能动 安装防火墙虚拟机 配置两个网卡 第一个 第二个桥接 设置子网掩码 虚拟机有DHCP 可以不用防火墙的DHCP 配置有网站的ip地址和网关 利用防火墙映射出去外网 然后看防火墙外网ip 然后…

C++三大特性(1)——继承

一.继承的概念及定义 概念 继承&#xff08;inheritance&#xff09;机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保存原有类特性的基础上进行拓展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称为派生类。继承呈现了面向…

set用法

ES6中的Set是一种新的数据结构&#xff0c;类似于数组&#xff0c;用于存储有序的数据。Set没有随机访问的能力&#xff0c;不能通过索引来获取具体的某个元素Set中的元素具有唯一性&#xff0c;不允许存储相同的元素。 Set本身是一个构造函数&#xff0c;可以用来实例化Set对…

计算机网络—HTTPS协议详解:工作原理、安全性及应用实践

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;ヒューマノイド—ずっと真夜中でいいのに。 1:03━━━━━━️&#x1f49f;──────── 5:06 &#x1f504; ◀️ ⏸…

陆面、生态、水文模拟与多源遥感数据同化

原文链接&#xff1a;陆面、生态、水文模拟与多源遥感数据同化https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247601198&idx6&sn51b9b26b75c9df1f11dcb9a187878261&chksmfa820dc9cdf584df9ac3b997c767d63fef263d79d30238a6523db94f68aec621e1f91df85f6…

VMware 安装配置 Ubuntu(最新版、超详细)

1. 下载安装 VMware ➡️➡️➡️来源&#xff1a;VMware Docs VMware Workstation Pro™ 使专业技术人员能够在同一台 PC 上同时运行多个基于 x86 的 Windows、Linux 和其他操作系统&#xff0c;从而开发、测试、演示和部署软件。 [Step 1]&#xff1a; 点击 VMware Workstati…

【Java探索之旅】从输入输出到猜数字游戏

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、输入输出1.1 输出到控制台1.2 从键盘输入 二、猜数字游戏2.1 所需知识&#xff1a…

【TI毫米波雷达】I2C初始化配置和主机数据收发,用SDA来模拟UART数据输出,可直接连接IWR6843AOP开发板引脚

【TI毫米波雷达】I2C初始化配置和主机数据收发&#xff0c;用SDA来模拟UART数据输出&#xff0c;可直接连接IWR6843AOP开发板引脚 文章目录 导入库引脚复用初始化I2C配置数据发送用SDA来模拟UART数据输出附录&#xff1a;结构框架雷达基本原理叙述雷达天线排列位置芯片框架Demo…

数据结构-----枚举、泛型进阶(通配符?)

文章目录 枚举1 背景及定义2 使用3 枚举优点缺点4 枚举和反射4.1 枚举是否可以通过反射&#xff0c;拿到实例对象呢&#xff1f; 5 总结 泛型进阶1 通配符 ?1.1 通配符解决什么问题1.2 通配符上界1.3 通配符下界 枚举 1 背景及定义 枚举是在JDK1.5以后引入的。主要用途是&am…

【Linux】进程通信之匿名管道通信

一、进程间进行通信的目的 我们往往需要多个进程协同&#xff0c;共同完成一些事情。 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程资源共享&#xff1a;多个进程之间共享同样的资源。通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c…

Netty NioEventLoop详解

文章目录 前言类图主要功能NioEventLoop如何实现事件循环NioEventLoop如何处理多路复用Netty如何管理Channel和Selector管理Channel管理Selector注意事项 前言 Netty通过事件循环机制(EventLoop)处理IO事件和异步任务&#xff0c;简单来说&#xff0c;就是通过一个死循环&…

23年坚守,只为打造高品质立秀膨体,索康让品质为中国说话

2024年3月23日&#xff0c;第二十三届上海国际整形美容外科大会&#xff08;以下简称“大会”&#xff09;在上海召开&#xff0c;本次大会由张涤生整形外科发展基金会主办&#xff0c;上海交通大学附属第九人民医院整复外科、Chinese Journal of Plastic and Reconstructive S…

性能优化 - 你知道CSS有哪些优化方案吗

难度级别:中高级及以上 提问概率:70% CSS是前端开发工作中必不可少的技能之一,同时也是网页开发中必不可少的重要元素之一。但很多人所开发的项目本身对性能要求并不高,再加上项目周期紧张,久而久之,也就容易养成不考虑细节的习惯,觉得C…

NzN的数据结构--二叉树part2

上一章我们介绍了二叉树入门的一些内容&#xff0c;本章我们就要正式开始学习二叉树的实现方法&#xff0c;先三连后看是好习惯&#xff01;&#xff01;&#xff01; 目录 一、二叉树的顺序结构及实现 1. 二叉树的顺序结构 2. 堆的概念及结构 3. 堆的实现 3.1 堆的创建 …

04-12 周五基于VS code + Python实现CSDN发布文章的自动生成

简介 之前曾经说过&#xff0c;在撰写文章之后&#xff0c;需要&#xff0c;同样需要将外链的图像转换为的形式&#xff0c;因此&#xff0c;可以参考 04-12 周五 基于VS Code Python 实现单词的自动提取 配置步骤 配置task 在vscode的命令面板configure task。配置如下的任…

python知识点汇总(十一)

python知识点总结 1、当Python退出时&#xff0c;是否会清除所有分配的内存&#xff1f;2、Python的优势有哪些&#xff1f;3、什么是元组的解封装4、Python中如何动态获取和设置对象的属性&#xff1f;5、创建删除操作系统上的文件6、主动抛出异常7、help() 函数和 dir() 函数…

人工智能基础部分26-基于知识推理引擎KIE算法的原理介绍与实际应用

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能基础部分26-基于知识推理引擎KIE算法的原理介绍与实际应用。知识推理引擎(Knowledge Inference Engine, KIE)是一种人工智能技术&#xff0c;其核心原理是基于规则和逻辑的方法来处理复杂的问题。它构建在业…