zoukankan      html  css  js  c++  java
  • NYOJ 138 找球号(二) (哈希)

    题目链接

    描述

    在某一国度里流行着一种游戏。游戏规则为:现有一堆球中,每个球上都有一个整数编号i(0<=i<=100000000),编号可重复,还有一个空箱子,现在有两种动作:一种是"ADD",表示向空箱子里放m(0<m<=100)个球,另一种是"QUERY”,表示说出M(0<M<=100)个随机整数ki(0<=ki<=100000100),分别判断编号为ki 的球是否在这个空箱子中(存在为"YES",否则为"NO"),先答出者为胜。现在有一个人想玩玩这个游戏,但他又很懒。他希望你能帮助他取得胜利。

    • 输入
      第一行有一个整数n(0<n<=10000);随后有n行;每行可能出现如下的任意一种形式:第一种:一个字符串"ADD",接着是一个整数m,随后有m个i;第二种:一个字符串"QUERY”,接着是一个整数M,随后有M个ki;
    • 输出
      输出每次询问的结果"YES"或"NO".
    • 样例输入
      2
      ADD 5 34 343 54 6 2
      QUERY 4 34 54 33 66
    • 样例输出
      YES
      YES
      NO
      NO

    分析:

    简单的哈希函数的应用,当添加的时候就将他加入到哈希函数中,在添加的时候用数组模拟链表的头插法的思想,定义一个head数组,一个next数组,head相当于一个链表的头节点,指向的是当前结点的下一个节点。

    代码:

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    using namespace std;
    const int Max=1000002;
    const int mod=111123;//这个值是看别人的目前我也不了解
    int Hash[Max],head[Max],next[Max];//head相当于每一个散列表的头节点,当前节点的下一个节点
    int top;
    void add(int m)//插入元素
    {
        int key=m%mod;
        next[top]=head[key];///与头插法的原理一样
        head[key]=top;
        Hash[top]=m;
        top++;
    }
    bool query(int m)//查询是否与m相同的元素4
    {
        int key=m%mod;
        for(int i=head[key]; i>-1; i=next[i])///挨着往下找
        {
            if(Hash[i]==m)
                return true;
        }
        return false;
    }
    main()
    {
        int n,m,num;
        char s[5];
        scanf("%d",&n);
        memset(head,-1,sizeof(head));///给head函数赋初值,head[i]=-1表示没有与i有冲突的
        top=0;
        while(n--)
        {
            scanf("%s %d",s,&m);
            if(s[0]=='A')
            {
                for(int i=0; i<m; i++)
                {
                    scanf("%d",&num);
                    add(num);
                }
            }
            else
            {
                for(int i=0; i<m; i++)
                {
                    scanf("%d",&num);
                    if(query(num)) printf("YES
    ");
                    else printf("NO
    ");
                }
            }
        }
    }
  • 相关阅读:
    最小生成树 kruskal算法&prim算法
    Floyd算法解决多源最短路问题
    dijkstra算法解决单源最短路问题
    改进后的作业排序
    第一篇 基本结构
    循环轮转算法
    在线工具生成接入信息mqtt.fx快速接入阿里云
    NodeMCU使用ArduinoJson判断指定键值对存在与否
    NodeMCU获取并解析心知天气信息
    快速导出jekyll博客文件进行上传部署
  • 原文地址:https://www.cnblogs.com/cmmdc/p/6731926.html
Copyright © 2011-2022 走看看