zoukankan      html  css  js  c++  java
  • Luogu P3370 【模板】字符串哈希

    gate

    对于每一位(s[i])
    (ans = (ans*base + (ull)s[i])\%mod + prime)

    建议数值
    (base = 131\ prime = 233317\ mod1 = 19260817\ mod2 = 20031101)

    • 双哈希
    #include<cstdio>
    #include<iostream>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    #define MogeKo qwq
    #define ull unsigned long long
    using namespace std;
    
    ull base = 131;
    struct node {
    	ull x,y;
    	bool operator < (const node &N)const {
    		return x<N.x || ((x==N.x) && (y<N.y));
    	}
    } a[10010];
    char s[10010];
    
    int n,ans;
    int prime = 233317;
    ull mod1 = 19260817;
    ull mod2 = 20031101;
    
    ull hash1(char s[]) {
    	int len = strlen(s);
    	ull ans = 0;
    	for(int i = 0; i < len; i++)
    		ans = (ans*base + (ull)s[i])%mod1 + prime;
    	return ans;
    }
    
    ull hash2(char s[]) {
    	int len = strlen(s);
    	ull ans = 0;
    	for(int i = 0; i < len; i++)
    		ans = (ans*base + (ull)s[i])%mod2 + prime;
    	return ans;
    }
    
    int main() {
    	scanf("%d",&n);
    	for (int i = 1; i <= n; i++) {
    		scanf("%s",s);
    		a[i].x = hash1(s);
    		a[i].y = hash2(s);
    	}
    	sort(a+1,a+n+1);
    	ans = 1;
    	for(int i = 1; i < n; i++) {
    		if(a[i].x != a[i+1].x || a[i].y != a[i+1].y)
    			ans++;
    	}
    	printf("%d
    ",ans);
    	return 0;
    }
    
    • 单哈希
    #include<cstdio>
    #include<iostream>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    #define MogeKo qwq
    #define ull unsigned long long
    using namespace std;
    
    ull base = 131;
    ull a[10010];
    char s[10010];
    int n,ans;
    int prime = 233317;
    ull mod = 212370440130137957ll;
    
    ull hashi(char s[]){
    	int len = strlen(s);
    	ull ans = 0;
    	for(int i = 0;i < len;i++)
    		ans = (ans*base + (ull)s[i])%mod + prime;
    	return ans;
    }
    
    int main() {
    	scanf("%d",&n);
    	for(int i = 1; i <= n; i++) {
    		scanf("%s",s);
    		a[i] = hashi(s);
    	}
    	sort(a+1,a+n+1);
    	ans = 1;
    	for(int i = 1; i < n; i++) {
    		if(a[i] != a[i+1])
    			ans++;
    	}
    	printf("%d",ans);
    }
    
  • 相关阅读:
    swarm集群搭建 及集群维护操作
    zabbix 告警说明
    yum 下载安装包
    mongdb常见操作
    cloudera5.16.1 离线安装
    centos7 安装hadoop-3.2.1
    rpcbind 启动报错
    ingress-nginx 安装
    Dubbo学习
    mybatis防止SQL注入
  • 原文地址:https://www.cnblogs.com/mogeko/p/13274170.html
Copyright © 2011-2022 走看看