元素查找 (codevs1230)哈希表模板

题目描述

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

 
输入描述 

第一行两个整数 n 和m。

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

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

 
输出描述 

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

 
样例输入

4 2

2 1 3 4

1 9

样例输出 

YES

NO

 

所有数据都不超过10^8


 

第一次真正意义上学哈希表,记录下该模板

 

代码如下:

#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
const int mod=10007;
vector<int> mp[10007];

int hash(int x)
{
    return x%mod;
}

int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;++i)
    {
        int tep;
        scanf("%d",&tep);
        mp[hash(tep)].push_back(tep);
    }
    for(int i=1;i<=m;++i)
    {
        int tep;
        bool flag=false;
        scanf("%d",&tep);
        for(int j=0;j<mp[tep].size();++j)
        if(tep == mp[hash(tep)][j])
        {
            flag=true;
            break;
        }
        if(flag) printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}

 

 

posted @ 2018-08-04 10:40  qseer  阅读(207)  评论(0编辑  收藏  举报