• POJ2503 Babelfish map或者hash_map


    POJ2503 这是一道水题,用Map轻松AC。

    不过,可以拿来测一下字符串散列, 毕竟,很多情况下map无法解决的映射问题需要用到字符串散列。

    自己生成一个质数, 随便搞一下。

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<string.h>
    #include<cmath>
    #include<vector>
    #include<algorithm>
    using namespace std;
    const int maxn=1e+6;
    const int P=999983;
    unsigned int base[100];
    int dic[maxn];
    char eng[100010][11];
    inline void  init_hash(char* s,int h[])
    {
     int l=strlen(s);
     h[0]=0;
     for(int i=1;i<=l;++i)
     	{
     	 h[i]=(h[i-1]*26+s[i-1])%P;
    	}
     base[0]=0;
     for(int i=1;i<=l;i++)
     	base[i]=(base[i-1]*26)%P;
    }
    
    inline unsigned int string_hash(char* s,int h[], int l, int r)//[l,r)左闭右开 
    {
     init_hash(s,h);
     return (h[r]-h[l]*base[r-1])%P;
    }
     int ha[maxn];
    int main()
    {freopen("t.txt","r",stdin);
     //ios::sync_with_stdio(false);
     memset(dic,0,sizeof(dic));
     char lan[11];
     int ditlen=1,tot=0;
     eng[0][0]='e';
     eng[0][1]='h';
     eng[0][3]='';
     while(true)
     	{
     	 char t=getchar();
     	 if(t=='
    ')break;
     	 int len=1;
     	 eng[ditlen][0]=t;
     	 while(true)
     	 	{
     	 	 t=getchar();
     	 	 if(t==' '){eng[ditlen][len++]='';ditlen++;break;}
     	 	 eng[ditlen][len++]=t;
    		}
    	 int lent=0;
    	 while(true)
    	 	{
    	 	 t=getchar();
    	 	 if(t=='
    '){lan[lent++]='';break;}
    	 	 lan[lent++]=t;
    		}
    	 int leng=strlen(lan);
    	 int has=string_hash(lan,ha,0,leng);
    	 while(has<0)has+=P;
    	 dic[has]=ditlen-1;
    	}
     while(scanf("%s",lan)!=EOF)
     	{
     	 int has=string_hash(lan,ha,0,strlen(lan));
     	  while(has<0)has+=P;
     	 has=dic[has];
     	 for(int i=0;;i++)
     	 	{
     	 	 if(eng[has][i]=='')break;
     	 	 printf("%c",eng[has][i]);
    		}
    	 printf("
    ");
    	}	
     return 0;
    }
    

      

  • 相关阅读:
    apache的用户认证
    Apache的配置文件
    AH00052: child pid 25043 exit signal Segmentation fault (11)
    Apache的工作模式
    apache的目录别名
    RAID的几种级别
    网络服务--NFS服务
    MySQL 5.7元数据库
    [ERROR] COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8'
    .Net MVC断点进不去
  • 原文地址:https://www.cnblogs.com/heisenberg-/p/6607608.html
Copyright © 2020-2023  润新知