zoukankan      html  css  js  c++  java
  • 元素查找(hash初步)

    元素查找

    题目描述:
    给出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
    重点内容
    hash思路:给定一个字符串(或数字串)a,模一个数(一般为质数),令x=a%mod,以x为起点,a为终点建立一条边,查询时扫描某一个点的连边即可。

    #include<iostream>
    using namespace std;
    const int maxn=500010;
    int n,m,tot,tmp,head[maxn];
    struct node
    {
        int to;
        int next;
    }e[maxn];
    int get_hash(int x)
    {
        return x%10007;
    }
    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 1;
        return 0;
    }
    int main()
    {
        int x,y;
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            cin>>tmp;
            x=get_hash(tmp);
            add_edge(x,tmp);
        }
        for(int i=1;i<=m;i++)
        {
            cin>>tmp;
            x=get_hash(tmp);
            if(find(x,tmp))
            cout<<"YES"<<endl;
            else cout<<"NO"<<endl;
        }
        return 0;
    }
  • 相关阅读:
    Sql中使用With创建多张临时表
    sql(join on 和where的执行顺序)
    什么是正则化
    ETL讲解(转)
    MySQL等 SQL语句在线练习
    Sublime text 3 --html
    Sublime text 3 搭建Python3 IDE
    地区列车经过查询
    Lasso回归算法: 坐标轴下降法与最小角回归法小结
    完全卸载VMware
  • 原文地址:https://www.cnblogs.com/cax1165/p/6070921.html
Copyright © 2011-2022 走看看