P1571 题解
本题大部分都是
好吧,这就是哈希做法。
哈希其实就是一种更省空间的映射,因为本题的编号
但是可能会出现冲突,也就是两个数取模这个数相同的情况。这个时候我们就可以使用拉链法,也就是在每个取模后的值那里拉一个链表,插入对于相同的就在链表后直接插入,查询时就枚举这个链表的每一个元素。
代码如下:
#include <bits/stdc++.h>
using namespace std;
#define MAXN 100001
#define MOD 100007
int n, m, x;
int a[MAXN];
struct Hash{
list<int> li[MOD];
void insert(int x){
li[x % MOD].push_back(x);
}
bool find(int x){
for (auto i: li[x % MOD]){
if (i == x) return true;
}
return false;
}
}ha;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for (int i(1); i<=n; ++i) cin >> a[i];
while (m--){
cin >> x;
ha.insert(x);
}
for (int i(1); i<=n; ++i){
if (ha.find(a[i])) cout << a[i] << ' ';
}
return 0;
}