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 = ;
const int maxN = 1e5 + 1e3 ;
typedef long long QAQ ; int cnt ;
int Next[ MOD << ] , Head[ MOD << ] , End[ MOD << ] ;
int A[ maxN ] ; inline int INPUT ( ) {
int x = , f = ; char ch = getchar ( ) ;
while ( ch < '' || '' < ch ) { if ( ch == '-' ) f = - ; ch = getchar ( ) ; }
while ( '' <= ch && ch <= '' ) { x = ( x << ) + ( x << ) + ch - '' ; 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= ; 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 ;
}

2016-10-26 00:14:00

上一篇:python 杂七杂八 :


下一篇:DSP using MATLAB 示例Example2.4