Codevs_1230_元素查找(set/Hash)

描述



http://codevs.cn/problem/1230/

...

分析



就是见识了一下简单的Hash是啥...set也可以做(其实我也不会用set).

给出一组数,查找其中是否存在某一个数x.很容易想到搞个桶,但是数字如果很大,比如整型上限,桶就开不下了,可以离散处理(以前一直用的自己脑补的离散方法).用Hash的话就是:假设共n个数,则记mod为任意一个大于等于n的数,这样x%mod在[0,mod-1],至少有n种不同的值,然后以模作为数组下标,如果已经被占了就往后走.查找的时候也是,如果被其他数占了就往后走,如果走到空的还没有找到,说明没有这个数(如果有就会占到空位).

#include <cstdio>
#include <set>
using namespace std;

int n,m,x;
int main(){
    scanf("%d%d",&n,&m);
    set <int> s;
    for(int i=1;i<=n;i++) scanf("%d",&x),s.insert(x);
    for(int i=1;i<=m;i++) scanf("%d",&x),s.count(x)?puts("YES"):puts("NO");
    return 0;
}

set

#include <cstdio>

const int mod=1e5+7;
int a[mod];
inline void insert(const int &x){ for(int k=x%mod;a[k]!=x;k=(k+1)%mod) if(!a[k]) { a[k]=x; return; } }
inline bool search(const int &x){ for(int k=x%mod;a[k]!=x;k=(k+1)%mod) if(!a[k]) return false; return true;}

int n,m,x;
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++) scanf("%d",&x),insert(x);
    for(int i=1;i<=m;i++) scanf("%d",&x),search(x)?puts("YES"):puts("NO");
    return 0;
}

Hash

时间: 2024-12-11 04:47:50

Codevs_1230_元素查找(set/Hash)的相关文章

codevs1230元素查找(hash)

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

jQuery元素查找方式

jQuery常用的元素查找方法总结 $("#myELement")    选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myElement所以得到的是唯一的元素 $("div")           选择所有的div标签元素,返回div元素数组 $(".myClass")      选择使用myClass类的css的所有元素 $("*")             选择文档中的所有的元素,可以运

jQuery 的选择器可谓之强大无比,这里简单地总结一下常用的元素查找方法

1 jQuery 的选择器可谓之强大无比,这里简单地总结一下常用的元素查找方法 2 3 $("#myELement") 选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myElement所以得到的是唯一的元素 4 $("div") 选择所有的div标签元素,返回div元素数组 5 $(".myClass") 选择使用myClass类的css的所有元素 6 $("*") 选择文档中的所有的元素,可

1230 元素查找

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

AC日记——元素查找 codevs 1230

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行,若出现则输出

WebDriver元素查找方法摘录与总结

WebDriver元素查找方法摘录与总结 整理By:果冻迪迪 selenium-webdriver提供了强大的元素定位方法,支持以下三种方法. ? 单个对象的定位方法 ? 多个对象的定位方法 ? 层级定位 定位单个元素 在定位单个元素时,selenium-webdriver提示了如下一些方法对元素进行定位. By.className(className)) By.cssSelector(selector) By.id(id) By.linkText(linkText) By.name(name)

查找练习 hash——出现过的数字

查找练习 hash--出现过的数字 题目描述 有一个数据字典,里面存有n个数字(n<=100000),小明现在接到一个任务,这项任务看起来非常简单--给定m个数字,分别查询这m个数字是否出现在字典之中:但是考虑到数据量的问题,小明找到了善于编程的你,希望你可以帮他解决这个问题. 输入 输入数据只有一组! 第一行包含两个整数n m,分别代表字典中数字的个数和要查询的数字的个数. 接着n行代表字典中的n个数字. 最后m表示要查询的数字. 输出 如果某个数字存在,则输出YES,否则输出NO 示例输入

算法开篇学习之数组元素查找

[摘要]最近两个月都在学习 Linux 驱动,中间碰到了很多问题,进度比较缓慢.尽管不是班科出生的,但是还是觉得算法很有必要学一学.因此将数组元素查找作为自己算法开篇的第一篇博客,好好跟着平凡程序员的博客学习,内容基本是拿来主义. 我们可以下面一个数组查找的函数说起.一句一句写起,首先我们开始从最简单的函数构造开始 int find(int array[], int length, int value) { int index = 0; return index; } 这里看到,查找函数只是一个

Java 实例 – 数组排序及元素查找

package array; import java.util.Arrays; public class MainClass { public static void main(String args[]) throws Exception { /** * 集合排序及元素查找 */ int array[] = { 2, 5, -2, 6, -3, 8, 0, -7, -9, 4 }; Arrays.sort(array); printArray("数组排序结果为", array); i