字符串 Hash

· · 个人记录

宏定义

常量和变量

函数

#define ull unsigned long long
struct Hash{
    const ull P=13331;
    //const mod=;
    char ji='a';
    ull qmi(int a){
        ull ans=1,b=P;
        while(a){
            if(a&1)
                ans*=b;
            b=b*b;
            a>>=1;
        }
        return ans;
    }
    ull ask(string s){
        ull f=int(s[0]-ji);
        int l=s.size();
        for(int i=1;i<l;i++){
            f=f*P;
            f+=int(s[i]-ji);
        }
        return f;
    }
    ull jia(ull a,ull b,int b_size){
        return a*qmi(b_size)+b;
    }
    ull jian(ull a,ull b,int s_size){
        return a-b*qmi(s_size);
    }
};