信息学奥赛一本通 1455:【例题1】Oulipo

2023-12-16 08:30

本文主要是介绍信息学奥赛一本通 1455:【例题1】Oulipo,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

1455:【例题1】Oulipo

分析

数据范围比较大,直接枚举会爆掉,需要字符串哈希,哈希值相同则两个字符串相同。

哈希就不说了,这里简单描述过程:


  1. 设定P,一般为131或13331
  2. 设定模mod,一般取2^{32}2^{64},实际上用unsigned int或unsigned long long就可以,会自然溢出。
  3. 设xp数组,预处理P^i
  4. 设h数组,表示哈希值,h_i=h_{i-1}\times P + str_i,但字符串下标从1开始
  5. str_{l \cdots r}的哈希值为h_r-h_{l-1}\times P^{r-l+1}

这里只要开一个h就行,s1的哈希值用一个变量递推就可以。

代码

#include <iostream>
#include <cstring>
using namespace std;
typedef unsigned long long ull;
const int N = 1e6 + 14, P = 131;
char s1[N], s2[N];
ull xp[N], h[N];
ull get(int l, int r) {return h[r] - h[l - 1] * xp[r - l + 1];
}
int main() {// 预处理p的i次方xp[0] = 1;for (int i = 1; i < N; i++) xp[i] = xp[i - 1] * P;int kase;cin >> kase;while (kase--) {// 输入,下标从1开始cin >> s1 + 1 >> s2 + 1;int len1 = strlen(s1 + 1), len2 = strlen(s2 + 1), cnt = 0;memset(h, 0, sizeof h);// 处理s1的哈希值ull q = 0;for (int i = 1; i <= len1; i++) q = q * P + s1[i];// 处理s2的哈希值for (int i = 1; i <= len2; i++) h[i] = h[i - 1] * P + s2[i];// 匹配for (int i = 1; (i + len1 - 1) <= len2; i++)if (get(i, i + len1 - 1) == q) cnt++;cout << cnt << endl;}return 0;
}

这篇关于信息学奥赛一本通 1455:【例题1】Oulipo的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/499844

相关文章

生信代码入门:从零开始掌握生物信息学编程技能

少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 介绍 生物信息学是一个高度跨学科的领域,结合了生物学、计算机科学和统计学。随着高通量测序技术的发展,海量的生物数据需要通过编程来进行处理和分析。因此,掌握生信编程技能,成为每一个生物信息学研究者的必备能力。 生信代码入门,旨在帮助初学者从零开始学习生物信息学中的编程基础。通过学习常用

生信圆桌x生信分析平台:助力生物信息学研究的综合工具

介绍 少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 生物信息学的迅速发展催生了众多生信分析平台,这些平台通过集成各种生物信息学工具和算法,极大地简化了数据处理和分析流程,使研究人员能够更高效地从海量生物数据中提取有价值的信息。这些平台通常具备友好的用户界面和强大的计算能力,支持不同类型的生物数据分析,如基因组、转录组、蛋白质组等。

【生物信息学算法】图算法1:概念和算法

文章目录 1. 图的定义、分类、表达方式图的定义图的分类表达方式Python实现 2.相邻节点和度概念定义python实现 3.路径、距离和搜索路径和距离搜索环 4.图论中的欧拉定理 1. 图的定义、分类、表达方式 图的定义 图G可以由两个集合来定义,即G=(V,E)。其中,V是对象的集合,称为图的顶点或节点; E是V中(u,v)顶点对的集合,称为边或弧,表示u和v之间的关系

大厂算法例题解之网易2018秋招笔试真题 (未完)

1、字符串碎片 【题目描述】一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,“aaabbaaac” 是由下面碎片组成的:‘aaa’,‘bb’,‘c’。牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的 平均长度是多少。 输入描述: 输入包括一个字符串 s,字符串 s 的长度 length(1 ≤ length ≤ 50),s 只含小写字母(‘a’-‘z’) 输出描述

正规式与有限自动机例题

答案:D 知识点: 正规式 正规集 举例 ab 字符串ab构成的集合 {ab} a|b 字符串a,b构成的集合 {a,b} a^* 由0或者多个a构成的字符串集合 {空,a,aa,aaa,aaaa····} (a|b)^* 所有字符a和b构成的串的集合 {空,a,b,ab,aab,aba,aaab····} a(a|b)^* 以a为首字符的a,b字符串的集

算法练习小技巧之有序集合--套路详细解析带例题(leetcode)

前言:         本文详细讲解Python中的有序集合SortedList和C++中的有序集合multiset的用法,配合leetcode的例题来展示实际的用处。(本人水平不够,还无法讲解有序集合的实现方法,只会用)         觉得有帮助或者写的不错可以点个赞,后面也有几道我找出来的题目可以用这个方法快速解决的         (感觉有点水) 目录 有序集合用法讲解:

【抽代复习笔记】28-群(二十二):四道子群例题

例1:证明,循环群的子群是循环群。 证:设G = (a),H ≤ G。 (1)若H = {e},则H是一阶循环群; (2)设H至少包含2个元素,即设H = {...,a^(-k),a^(-j),a^(-i),a^0,a^i,a^j,a^k,...}, 其中a^i是H中正指数最小的元素,0<i<j<k, 下证a^i是H的生成元: 对任意的a^t∈H(t∈Z),存在q∈Z,使得t = qi

两个月冲刺软考——逻辑地址与物理地址的转换(例题+讲解);文件类型的考点

1.已知计算机系统页面大小和进程的逻辑地址,根据页面变换表(页号-物理块号),求变换后的物理地址。 首先介绍几个公式: 逻辑地址 = 页号 + 页内地址 (默认为32机位) 物理地址 = 物理块号 + 物理地址的页内地址 其中:页内地址 = 物理地址的页内地址 解题:由于页面大小为4K,即4K=2的12次方,占0~11位;也就是页内地址有12位,故十六进制数中的C28是页内地址,那

【简历】25届南京某一本JAVA简历:简历通过率还好,但是拿不到OFFER

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 简历说明 今天看一份25届南京某一本大学的Java简历。 这个简历呢,学校是一本。我们说上来先要定校招层次,这个层次就按照中厂来讲。因为现在很多的双非一本目标都是在中厂。 这个同学有个实习经历,一本有八成的同学主项目都是重复的。HR他只能看到项目重不重复,要点对不对他不知道,就从这个角度来看,这位同学

高级编程语言翻译例题

编译器的流程 源程序—词法分析—语法分析—语义分析—中间代码生成—代码优化—目标代码生成—目标程序 选项A:先进性词法分析,接着进行语法分析,最后进行语义分析 选项B:语法分析阶段只能发现程序上的语法错误,其他类型错误不能发现 选项C:语义分析阶段与目标机器的体系结构无关 根据排除法选择D