首页 > 代码库 > Code[VS] 1230 题解

Code[VS] 1230 题解

1230 元素查找
题目描述 Description

  给出n个正整数,然后有m个询问,每个询问一个整数,询问该整数是否在n个正整数中出现过。

输入描述 Input Description

  第一行两个整数 n 和m。

  第二行n个正整数(1<=n<= 100000)

  第三行m个整数(1<=m<=100000)

输出描述 Output Description

  一共m行,若出现则输出YES,否则输出NO

样例输入 Sample Input

  4 2

  2 1 3 4

  1 9

样例输出 Sample Output

  YES

  NO

数据范围及提示 Data Size & Hint

  所有数据都不超过10^8

———————————————分割线———————————————

Hash Table 练习题

技术分享
#include "bits/stdc++.h"using namespace std ;const int MOD = 10000007 ;const int maxN = 1e5 + 1e3 ; typedef long long QAQ ;int cnt ;int Next[ MOD << 1 ] , Head[ MOD << 1 ] , End[ MOD << 1 ] ;int A[ maxN ] ;inline int INPUT ( ) {        int x = 0 , f = 1 ; char ch = getchar ( ) ;        while ( ch < 0 || 9 < ch ) { if ( ch == - ) f = -1 ; ch = getchar ( ) ; }        while ( 0 <= ch && ch <= 9 ) { x = ( x << 1 ) + ( x << 3 ) + ch - 0 ; ch = getchar ( ) ; }        return x * f ; }inline int Hash_Function ( int x ) {return ( ( x % MOD ) + MOD ) % MOD ; }inline bool Find ( const int tmp ) {        int pos = Hash_Function ( tmp ) , y ;        for ( int i=Head[ pos ] ; y = End[ i ] , i ; i = Next[ i ] ) if ( y == tmp ) return true ;        return false ; }inline void Hash_Link ( const int tmp , const int pos ) {        Next[ ++cnt ] = Head[ pos ] ;         Head[ pos ] = cnt ;        End[ cnt ] = tmp ; }inline void Hash_Add ( const int tmp ) {        int pos = Hash_Function ( tmp ) , y ;        for ( int i=Head[ pos ] ; y = End[ i ] , i ; i = Next[ i ] ) if ( y == tmp ) return ;         Hash_Link ( tmp , pos ) ;   }int main ( ) {        int N = INPUT ( ) , Q = INPUT ( ) ;         for ( int i=1 ; i<=N ; ++i ) {                A[ i ] = INPUT ( ) ;                if ( !Find ( A[ i ] ) )                         Hash_Add ( A[ i ] ) ;         }        while ( Q -- ) {                if ( Find ( INPUT ( ) ) ) cout << "YES" << endl ;                else cout << "NO" << endl ;          }        return 0 ; }
View Code

 

2016-10-26 00:14:00

Code[VS] 1230 题解