zoukankan      html  css  js  c++  java
  • 【wikioi】1230 元素查找(巨水题+set/hash)

    http://wikioi.com/problem/1230/

    这题我真的不好意思写题解了。。。set练手。。

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

    还是写第二种方法吧,hash。(速度比第一种快)

    (我从来没写过啊囧,但是一看就会了,太简单了。。)

    我们一般是用mod来做hash的,但是有时会有冲突,肿莫办!!!!!

    哈哈,很简单,如果有冲突我就往后跑,往后占!!!查找也是一样,不等于就往后跑,往后占!!

    这样,hash的空间就可以压很小了。(但是注意,如果范围很密集,这样做会失效。。。)

    #include <cstdio>
    #include <set>
    using namespace std;
    int a[100009], md=100007;
    void ins(const int &x) { for(int k=x%md; a[k]!=x; k=(k+1)%md) if(!a[k]) { a[k]=x; return; } }
    int sea(const int &x) { for(int k=x%md; a[k]!=x; k=(k+1)%md) if(!a[k]) return 0; return 1; }
    int main() {
        int n, m, t;
        scanf("%d%d", &n, &m);
        set<int> s;
        for(int i=1; i<=n; ++i) scanf("%d", &t), ins(t);
        for(int i=1; i<=m; ++i) scanf("%d", &t), sea(t)?puts("YES"):puts("NO");
     	return 0;   
    }
    

    给出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

  • 相关阅读:
    RocketMQ中Producer消息的发送源码分析
    VS等待调试
    Window&Linux遍历某一文件夹
    遍历当前USB设备信息
    批处理常用符号详解
    Windows 批处理(bat)语法大全
    Windows CMD命令大全(值得收藏)
    遍历文件夹
    ASCII,UTF-8,Unicode字符串相互转换
    shellexecute的使用和X64判断
  • 原文地址:https://www.cnblogs.com/iwtwiioi/p/3932021.html
Copyright © 2011-2022 走看看