zoukankan      html  css  js  c++  java
  • 手写哈希(实现简单的加数、查询)

    题目:

    有很多货物,有n个操作(0<= n <= 1e6)

    加数操作:将输入的编号为x的货物标记

    查询操作:查询输入的编号为x的货物是否被标记

    思路:

    这个题目还是比较简单的,但是想尝试一下哈希算法,手写哈希最重要的还是要处理好冲突问题。

    代码:

    #include <bits/stdc++.h>
    #define inf 0x3f3f3f3f
    #define FRE() freopen("in.txt", "r", stdin)
    #define FRO() freopen("out.txt", "w", stdout)
    
    using namespace std;
    typedef long long ll;
    const int maxn = 1e6+10;
    const int MOD = 1e6+7;
    int mp[maxn];
    
    void addNum(int x)
    {
        int t = x;
        x = x%MOD;
        while(true)
        {
            if(!mp[x])
            {
                mp[x] = t;
                return;
            }
            if(mp[x] != t)//处理冲突
                x = (x+1)%maxn;
            else return;
        }
    }
    
    bool query(int x)
    {
        int t = x;
        x = x%MOD;
        while(true)
        {
            if(!mp[x]) return false;
            if(mp[x]!=t)
                x = (x+1)%maxn;
            else return true;
        }
    }
    
    int main()
    {
        int n;
        scanf("%d",&n);
        while(n--)
        {
            int o,x,idx;
            scanf("%d%d",&o,&x);
            if(o==0)
            {
                addNum(x+1);
            }
            else
            {
                if(query(x+1)) printf("yes
    ");
                else printf("no
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    Cg学习
    Unity URP
    unity官方案例水效果解析
    Unity使用Xlua框架热更
    隐私政策以及用户协议
    iOS App 从点击到启动
    iOS编程中throttle那些事
    Homebrew安装
    ios 开发证书 appids 描述文件关系
    学习网站
  • 原文地址:https://www.cnblogs.com/sykline/p/10959254.html
Copyright © 2011-2022 走看看