• 字符串hash


    #include<iostream>
    #include<cstdio>
    #include<cstring> 
    #define ll long long
    #define mod 998244353
    #define maxn 100010
    #define jin 26//进制
    using namespace std;
    
    int l,r;
    int h[maxn];//前缀的hash的值 abcdacc ->1234133
    int mi[maxn];//进制的i次方
    char s[maxn];
    
    //函数封装不容易出错
    int ad(int x,int y){//+
        return (x+y)%mod;
    }
    
    int sub(int x,int y){//-
        return (x-y+mod)%mod;
    }
    
    int mul(int x,int y){//*
        return (ll)x*y%mod;
    }
    
    int main(){
        cin>>s+1;//从第1位开始输入字符串
        int n=strlen(s+1);
        cin>>l>>r;
        mi[0]=1;
        for(int i=1;i<=n;i++){
            // mi[i]=((ll)mi[i-1]*jin)%mod;//写法一
            mi[i]=mul(mi[i-1],s[i]-'a');//写法二
        }
        for(int i=1;i<=n;i++){
            // h[i]=((ll)h[i-1]*jin+(s[i]-'a'))%mod;
            h[i]=ad(mul(h[l-1],jin),s[i]-'a');
        }
        // int hsh=((h[r]-h[l-1]*mi[r-l+1])%mod+mod)%mod;//注意取模,+mod保证结果为正数
        int hsh=sub(h[r],mul(h[l-1],mi[r-l+1]));
        cout<<hsh<<endl;//随便输出的(雾
        return 0;
    }
  • 相关阅读:
    使用gunicorn部署flask项目
    加密算法详解
    elasticsearch安装
    elk下载链接
    mysql允许远程连接
    工作流源代码分析
    查看账户的访问token
    Kube-proxy组件
    创建服务账户/查询访问token
    K8s概念2
  • 原文地址:https://www.cnblogs.com/DReamLion/p/14391446.html
Copyright © 2020-2023  润新知