字符串

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int hashy[1000]={0};//存最后存入的哈希值为i的量的内存编号
int nexty[20000];//存每个内存的上一个同哈希值量的内存的编号
char data[20000][1000];//存数据
int cnt=0;
int u;
inline void hash_insert(char * zfc)
{
    int len=strlen(zfc);
    int val=0;
    for(int i=0;i<len;i++)val=(val+(zfc[i])*437)%997;//生成哈希值
    cnt++;
    strcpy(data[cnt],zfc);
    nexty[cnt]=hashy[val];
    hashy[val]=cnt;//放入量,模拟链表结构
}
inline bool hash_find(char *zfc)
{
    int len=strlen(zfc);
    int val=0;
    for(int i=0;i<len;i++)val=(val+(zfc[i])*437)%997;
    u=hashy[val];
    while(u)//查询
    {
        if(strcmp(data[u],zfc)==0)return true;
        u=nexty[u];
    }
    return false;
}
char dr[1000];
inline void dy(char*zfc)//读入(读优)
{
    int d=0;
    char dr=getchar();
    while(!(dr==' '||(dr>='0'&&dr<='9')||(dr>='A'&&dr<='z')))dr=getchar();
    while(dr==' '||(dr>='0'&&dr<='9')||(dr>='A'&&dr<='z'))zfc[d++]=dr,dr=getchar();
}
int main()
{
    int n,m;
    int day=0;
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        memset(dr,0,sizeof(dr));
        dy(dr);
        hash_insert(dr);
    }
    for(int i=0;i<m;i++)
    {
        memset(dr,0,sizeof(dr));
        dy(dr);
        if(hash_find(dr))day++;//计数
    }
    printf("%d",day);
    return 0;
}

 

posted @ 2017-08-29 20:59  third2333  阅读(121)  评论(0编辑  收藏  举报