字符串
#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; }