zoukankan      html  css  js  c++  java
  • codevs1230 元素查找

    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

    在对于询问进行处理时,最简单的方法进行查找是O(n)即在数组里一个个查询,而这样速度很慢,虽然可以进行二分但时间复杂度依然是logn。

    这时我们就要时用哈希表,取每个元素的值为key值,对10007(或者另个较大的质数)取mod进行记录,这样即可O(1)查询

    但对于每个数a,hash(a)可能相同而用vector进行记录即可防止重复

    查询时与记录过程类似,不做赘述。

    #include<cstdio>
    #include<vector>
    using namespace std;
    const int mod=10007;
    int hash(int x)
    {
        return x%mod;
    }
    vector<int>x[10009];//不定长数组以防止出现重复
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        while(n--)
        {
            int a;
            scanf("%d",&a);
            x[hash(a)].push_back(a);//对于每个值将其转为hash(a)。
        }
        while(m--)
        {
            int a,t,pd=0;
            scanf("%d",&a);
            t=hash(a);
            for(int j=0;j<x[t].size();j++)
                if(x[t][j]==a) pd=1;
            if(pd) printf("YES
    ");
            else printf("NO
    ");
        }
        return 0;
    }
  • 相关阅读:
    dedeCMS自定义dede标签
    phpstrom配置Xdebug
    ElasticSearch安装 --- windows版
    MySQL语句优化
    PHP高并发商城秒杀
    【java_需阅读】Java中static关键字用法总结
    【java】public,private和protected
    PICT测试工具的安装及使用
    【android】Android am命令使用
    【python】获取指定网页上的所有超级链接
  • 原文地址:https://www.cnblogs.com/bzmd/p/5991944.html
Copyright © 2011-2022 走看看