codevs1230元素查找(hash)

时间:2023-03-10 01:20:43
codevs1230元素查找(hash)

1230 元素查找

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 钻石 Diamond
题目描述 Description

给出n个正整数,然后有m个询问,每个询问一个整数,询问该整数是否在n个正整数中出现过。

输入描述 Input Description

第一行两个整数 n 和m。

第二行n个正整数(1<=n<= 100000)

第三行m个整数(1<=m<=100000)

输出描述 Output Description

一共m行,若出现则输出YES,否则输出NO

样例输入 Sample Input

4 2

2 1 3 4

1 9

样例输出 Sample Output

YES

NO

数据范围及提示 Data Size & Hint

所有数据都不超过10^8

两种哈希基本写法:

//哈希表

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm> #define MAXN 1000008
#define MOD 1000007 using namespace std; int hashTable[MAXN]; void update(int x) //将数字x加入哈希表
{
int num=x;
x%=MOD;
while()
{
if(!hashTable[x])
{
hashTable[x]=num;
return;
}
if(hashTable[x]!=num)
{
x++;
if(x==MAXN) x=;
}
else return;
}
} bool query(int x) //查找哈希表中是否有数字x
{
bool found=false;
int num=x;
x%=MOD;
while()
{
if(!hashTable[x]) return false;
if(hashTable[x]!=num)
{
x++;
if(x==MAXN) x=;
}
else return true;
}
} int main()
{
int n,m,x;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d",&x);
update(x+);
}
for(int i=;i<=m;i++)
{
scanf("%d",&x);
if(query(x+)) printf("YES\n");
else printf("NO\n");
}
return ;
}

心若向阳,无言悲伤

//单模建边(这个题数据水)

#include<iostream>
using namespace std;
const int maxn=;
int n,m,tot,tmp,head[maxn];
struct node
{
int to;
int next;
}e[maxn];
int get_hash(int x)
{
return x%;
}
void add_edge(int u,int v)
{
tot++;
e[tot].to=v;
e[tot].next=head[u];
head[u]=tot;
}
bool find(int u,int v)
{
for(int i=head[u];i;i=e[i].next)
if(e[i].to==v)return ;
return ;
}
int main()
{
int x,y;
cin>>n>>m;
for(int i=;i<=n;i++)
{
cin>>tmp;
x=get_hash(tmp);
add_edge(x,tmp);
}
for(int i=;i<=m;i++)
{
cin>>tmp;
x=get_hash(tmp);
if(find(x,tmp))
cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return ;
}

心若向阳,无言悲伤

map水过...

#include<cstdio>
#include<iostream>
#include<map>
using namespace std;
map<int,int>ma;
int n,m,a[],x;
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
ma[a[i]]=;
}
for(int i=;i<=m;i++)
{
cin>>x;
if(ma[x]) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return ;
}

心若向阳,无言悲伤