回文Hash

214. 最短回文串(Rabin-Karp 字符串哈希算法) 文章目录前言一、题目分析二、回文数判断算法(Rabin-Karp字符串哈希算法)三.代码四、结果与题目链接 前言 题目:leetcode 214.最短回文数 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。 示例 1: 输入: “aacecaaa” 输出: “aaacecaaa” 示例 2: 输入: “abcd” 输出: “dcbabcd” 一、题目分析 假定给定字符串s,那么假设s2=s-s[0],则s2的翻转+s一定是一个回文数。如 阅读详情

转自 http://www.cnblogs.com/Lyush/archive/2012/12/10/2812096.html

#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <iostream>
#define T 31LLU
using namespace std;
typedef unsigned long long Int64;

// 给定一个字符串,现在在这个串上进行一系列的动态操作
// 难点是在这些动态的修改的过程中,问任意一段是否为回文串 
// 思路是以某种方法来判定一个串是否相等,我们很容易想到字
// 符串的hash处理,对就是插值取模,解决了字符串比较的问题
// 选择插值取模的方法是有一定理由的,这个方法能够避免冲突
// 而且能够承受动态修改带来的hash值的更改 

char s[1000005];

int Q, N;

Int64 bit[1000005], f[1000005], t[1000005];

void pre() {
    bit[0] = 1;
    for (int i = 1; i <= 1000000; ++i) {
        bit[i] = bit[i-1] * T; 
    } // 先预处理所有的T的幂, ull拥有对上界自动取模的作用
}
/*
    树状数组保留的是最原始的值 
*/

inline int lowbit(int x) {
    return x & -x;
}

void add(int x, Int64 c[], Int64 val) {
    for (int i = x; i <= N; i += lowbit(i)) {
        c[i] += val;
    }
}

Int64 sum(int x, Int64 c[]) {
    Int64 ret = 0;
    for (int i = x; i > 0; i -= lowbit(i)) {
        ret += c[i];
    }
    return ret;
}

bool judge(int a, int b) { //(a,b) (N+1-b,N+1-a)   a-1, N-b
    // 这里有一个对阶的任务要完成,首先我们要找到这个阶数
    int x = a-1, y = N-b, z; // 最左边的阶码
    z = max(x, y); // z是我们要对齐的阶码
    Int64 ll = sum(b, f) - sum(a-1, f); // 从左往右看这个串
    Int64 rr = sum(N-a+1, t) - sum(N-b, t);
    ll *= bit[z-x];
    rr *= bit[z-y];
    return ll == rr;
}

void modify(int x, int val) {
    add(x, f, (val-s[x])*bit[x-1]);
    add(N+1-x, t, (val-s[x])*bit[N-x]);
    s[x] = val;
}

int main() {
    char op[5], ch[5];
    int a, b;
    pre();
    while (scanf("%s", s+1) == 1) {
        N = strlen(s+1);
        memset(f, 0, sizeof (long long) * (N+1));
        memset(t, 0, sizeof (long long) * (N+1));
        // 避免每次都对整个数组进行初始化
        for (int i = 1, j = N; i <= N; ++i, --j) {
            s[i] -= 'a';
            add(i, f, s[i]*bit[i-1]);
            add(j, t, s[i]*bit[j-1]);
            // 取的位置一样但是权值不一样
        }
        scanf("%d", &Q);
        while (Q--) { // 接受Q个擦操作
            scanf("%s", op);
            if (op[0] == 'Q') { // 询问的是[a ,b]是否是一个回文串
                scanf("%d %d", &a, &b);
                printf(judge(a, b)? "yes\n" : "no\n");
            } else {
                scanf("%d %s", &a, ch);
                modify(a, ch[0]-'a');
            }
        }
    }
    return 0;
}


回文子串的最大长度(二分+Hash) 题意: 题面意思 思路: 上一道兔子兔子的题目,我们知道判断两个字符串是否相等,可以使用字符串哈希,也就是将字符串算成P进制数值,然后区间和判断即可,那么这道题目我们需要一个正的字符串,还需要一个反的字符串,然后如果正字符串等于反的字符串之所以要这么做,因为我们是要回文串所以我们需要将回文拆解成为一个正字符串和一个反字符串,这样才好处理这道题目. 既然如此,我们可以算出一个前缀和,再算出一个后缀和,然后就可以知道,正字符串和一个反字符串.字符串的哈希值就是这个区间的哈希值和. 算完之后,我们当前就只需要枚. 阅读详情

相关推荐

AutoCAD2014与ObjectARX开发环境搭建实战指南

本文提供了一份详细的AutoCAD2014与ObjectARX开发环境搭建实战指南。内容涵盖从AutoCAD2014、Visual Studio 2010及ObjectARX 2014 SDK的版本匹配与环境准备,到Wizard安装、编码问题解决、Visual Studio配置,并最终通过一个完整的绘图命令开发示例,手把手引导开发者创建并加载第一个可运行的ObjectARX插件,为后续深入开发奠定坚实基础。

weixin_28475533的博客 288

【dtoj#1029】第二饭堂

传送门 题目描述 由于一饭班长表示各种鸭梨,美丽的纪中决定历史性地启用第二饭堂。而部分领导觉得,二饭依山傍水,环境优美,未免有不和谐的事情(你懂的)发生,决定到二饭巡视同学们用餐时的就座情况。 为了应付这一情况,同学们决定联合起来“布阵”。 方便起见,同学们已经把座位情况抽象成一个长度为 nnn 的仅含数字及字母的字符串,他们想请你帮忙算算这个字符串的和谐程度。 已知一个字符串被称为 k−k-k−回文串的充要条件是它自身是回文串,并且它长为 n/2n/2n/2(下取整)的前缀和后缀是(k−1)−(k-1)-

SSOI_Keyly 566

Python广度优先搜索BFS - 蓝桥13届省赛污染海域

请问这片N * M海域中有几块是没被污染的独立海域(没被污染的独立海域是指该块海域上下左右被已污染的海域包围,且N * M以外的海域都为已被污染的海域)有一片海域划分为N * M个方格,其中有些海域已被污染(用0表示),有些海域没被污染(用1表示)。第二行开始输入N行,每行M个数字(数字只能为1或者0,1表示没被污染的海域,0表示已被污染的海域)这块4 * 5的海域,有3块海域(绿色)没被污染,因为每一块的上下左右都被污染的海域包围。输出一个整数,表示N * M的海域中有几块是没被污染的独立海域。

m0_69865359的博客 271

第二饭堂

Description由于一饭班长表示各种鸭梨,美丽的纪中决定历史性地启用第二饭堂。 而部分领导觉得,二饭依山傍水,环境优美,未免有不和谐的事情(你懂的)发生,决定到二饭巡视同学们用餐时的就座情况。 为了应付这一情况,同学们决定联合起来“布阵”。 方便起见,同学们已经把座位情况抽象成一个长度为n的仅含数字及字母的字符串,他们想请你帮忙算算这个字符串的和谐程度。 已知一个字符串被称为k-回文串

magical_qting的博客 1147

联想ThinkPad声卡驱动安装避坑指南:从E470到X1 Carbon的通用解法

本文详细介绍了ThinkPad声卡驱动安装的全流程,从硬件识别到驱动获取、安装技巧及深度排错。涵盖E470到X1 Carbon等不同机型的通用解法,帮助用户解决音频驱动问题,提升使用体验。重点讲解了声音驱动的精准识别和安装策略,确保系统稳定运行。

weixin_29207439的博客 711

Easy系列PLC远程IO模块的安装配置和地址访问(EtherCAT总线)

EtherCAT分布式时钟DC(SOEM源码解析)EtherCAT分布式时钟DC(SOEM源码解析)_soem dc同步-优快云博客文章浏览阅读1.2k次。分布式时钟(DC,Dsitributed Clock)可以使所有 EtherCAT设备使用相同的系统时间,从而控制各设备任务的同步执行。_soem dc同步1200PLC连接分布式IO组态编程应用(ES200SP固件版本不同解决方法)

RXXW_Dor的博客 178

利用hash值判断字符串中的某一段是否为回文串

求哈希值 根据hash函数来求hash值:hash[i] = hash[i-1]*p+val[i],其中p为素数,一般取233,hash[i]表示1-i这一段的hash值,val[i]为第i个字符的值。 下面以数字字符为例求hash值。 一般采用unsigned long long,会自动取模。 code h1[0] = 0;//正向hash值 h2[0] = 0;//反向hash值 p[0] = 1; for(int i = 1; i <= n; i++){ h1[i] = (h1

qq_46653910的博客 3246

24届数字IC设计/验证秋招总结贴——先看这个

为方便快速进行查找该专栏的内容,将所有内容链接均放在此篇博客中整理不易,欢迎订阅~~

qq_42135020的博客 8416

字符串回文hash 模板题 O(1)判字符串是否回文

回文

m0_50007959的博客 485

使用conda环境python3.13和python3.12下安装vllm过程记录

使用conda环境python3.13和python3.12下安装vllm过程记录

没刮胡子的程序员专栏 885

厉害了,华为推出下一代光传送网:fgOTN

2024年10月,在全球信息技术博览会(GITEX Global 2024)上,华为正式发布了其颠覆性的创新产品——端到端细粒度光传送网(fgOTN)解决方案。这一产品组合被誉为行业内首个fgOTN,旨在重塑光传送网络的格局,满足电力运输等行业日益增长的通信需求。在过去的近三十年中,同步数字体系(SDH)技术一直是电信和工业网络的支柱,因其可靠性、稳定性和低延迟而备受青睐。然而,随着数据需求的激增,SDH的最大带宽仅为10 Gbps,逐渐显露出局限性。

网络技术联盟站 637

回文字串-字符串哈希

回文子串-字符串哈希 前言 求解回文字串问题不仅可以用马拉车算法(O(n))(O(n))(O(n)),也可以用字符串哈希(O(nlogn))(O(nlogn))(O(nlogn)) 解法 首先我们发现回文子串具有“单调性”,即如果s[i...j]s[i...j]s[i...j]为回文子串,那么s[x...y]s[x...y]s[x...y]也为回文子串(i<x<y<j)(i&lt...

Daniel__d的博客 1107

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

判定回文串-暴力、字符串哈希算法

问题描述给定一个长度为 n 的字符串 S,再给定 q 组查询,每组查询给定一个 l,r,询问 sl∼r 是否是回文串。若是,输出Yes,否则输出No。输入格式第一行输入二个正整数 n,q,表示字符串的长度与查询数。接下来一行输入一个字符串 S。接下来 q 行,每行输入两个正整数 l,r。(1≤l≤r≤n)保证 S 为小写字母构成,且字符串索引从 1 开始。输出格式对于每组查询,给定一个 l,r,询问 sl∼r 是否是回文串。若是,输出Yes,否则输出No。样例输入样例输出YesNo。

qq_73953690的博客 388

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

迷之回文 (滚动哈希算法)

迷之回文 题目描述 FF最近喜欢上了回文串,比如aa,aba都是回文串,今天FF有了一个奇葩的想法。 对于给定的一个字符串S(仅有小写英文字母组成,|S| <= 100000),FF想知道S的前缀中有多少个是回文串。 如,ababa,前缀”a”,”aba”,”ababa”都是回文串。 输入 多组输入。每组数据一个字符串S。 ...

dif90304的博客 93

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【ybtoj】【hash】【例题2】回文子串

【例题2】回文子串Link解题思路Code Link 传送门 题目 解题思路 Code #include <iostream> #include <cstring> #include <cstdio> #define ull unsigned long long using namespace std; char s[10401000]; ull n, number, ans, l, r, mid; ull zheng[1010100], fan[1010100

蒟蒻的OI路 535

困难的回文串(哈希模板)

Description 是的没错,学chang就是这么的菜,WA了34次才把这道题过了。题目很简单,就是让你判断一个字符串是否为回文串。仅此而已。 Input 测试数据有多组: 对于每组测试数据输入一个n表示字符串长度,接着输入长度为n的字符串(1 <= n <= 1e7) Output 对于每组输出判断当前字符串是否为回文串,如果是回文串输出YES,否则输出NO。 Sample Input Copy 6 aaaaaa 6 xuejie Sample Output Copy YES NO #in

Choi_John的博客 372

【模板记录】字符串哈希判断回文串

字符串哈希判断回文串

m0_53005929的博客 847

字符串哈希On求最长回文子串

模板题链接 AcWing139. 回文子串的最大长度 众所周知,manacher可以On求最长回文子串,但是神奇的字符串hash也可以做到求最长回文串。 步骤: 预处理字符串,类似于manacher,每两个字符中间插入‘#’,因为这样才能枚举中心。 预处理正哈希和逆哈希,如果正哈希[l,r]==逆哈希[l,r],说明两个字符串相同。 枚举回文中心,二分求回文半径。 可以看出,时间复杂度是O(nlogn)O(nlogn)O(nlogn),代码如下: unsigned long long order1[2

陈颜的博客 5597

字符串哈希-Acwing-回文子串的最大长度

字符串哈希-Acwing-回文子串的最大长度 题目: 如果一个字符串正着读和倒着读是一样的,则称它是回文的。 给定一个长度为N的字符串S,求他的最长回文子串的长度是多少。 输入格式 输入将包含最多30个测试用例,每个测试用例占一行,以最多1000000个小写字符的形式给出。 输入以一个以字符串“END”(不包括引号)开头的行表示输入终止。 输出格式 对于输入中的每个测试用例,输出测试用例编号和最大...

njuptACMcxk的博客 476

《复仇者联盟:末日之战》技术解析:CGI与虚拟制作如何重塑超级英雄电影

计算机图形学(CGI)是电影工业中实现视觉特效的核心技术,其原理是通过算法生成和渲染虚拟图像,与实拍画面无缝融合。在工程实践中,基于物理的渲染(PBR)技术能模拟真实光线与材质互动,提升画面质感。虚拟制作则通过LED屏幕实时投射CG环境,使演员在拍摄时沉浸于数字场景中,大幅降低后期合成成本。这些技术的价值在于突破物理限制,创造超越现实的视觉奇观,广泛应用于科幻、奇幻类影视作品。以漫威新片《复仇者联盟:末日之战》为例,工业光魔采用新一代CGI技术呈现毁灭博士的装甲变形与魔法效果,同时结合虚拟制作实现X战警超能

weixin_33802505的博客 298

[hash] 哈希的简单入门

算法竞赛中的哈希是往往是种种概率/玄学但是又贼鸡儿快方便的神奇算法 本质是通过对目标数据建立唯一映射进行缩小数据规模的权值判断, 常常可以乱搞一些题目 对循环数组的hash https://www.acwing.com/problem/content/139/ 解题思路: 对每个六元组求最小表示, 然后用乘积与和对应的双hash映射入一个链表 再判断即可 字符串哈希 http...

Zeolim的博客 357

习题课4-1(hash、回文串问题)

习题课4-1(hash、回文串问题) 矩形 给定两个矩阵,判断第二个矩阵在第一个矩阵哪些位置出现过 输出位置的左上角 有多个答案,按字典序输出 解法1 用一个数字来代替一个矩阵 枚举两个矩阵,n4,,504是1亿以内的 解法2 哈希字符串 ebacd hash(ebacd) = (5B4+2B3+B2+3B1+4B^0) mod mo B是大于26的任意指数 mo为一个很大的质数 如何尽量减少碰撞的可能 取两套B mo,如果算出来的hash1和hash2都相等,则认为这两

Markland_l的博客 1020
上一篇: UVALive 3938 "Ray, Pass me the dishes!"
下一篇: LA 4255 Guess
MakingMaker
博客等级 码龄15年 6粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值