Pagini recente » Cod sursa (job #808314) | Cod sursa (job #1456937) | Cod sursa (job #1505071) | Cod sursa (job #1305260) | Cod sursa (job #3142506)
#include <fstream>
using namespace std;
ifstream fin("dtcsu.in");
ofstream fout("dtcsu.out");
const int DTCSU_NUMBERS = 276997;
const int NIL = -1;
template<typename T>
class HashTable{
private:
static const int MOD = 202393;
int head[MOD];
int key[DTCSU_NUMBERS], nxt[DTCSU_NUMBERS];
int n;
static inline int hash(T x){
return x % MOD;
}
public:
HashTable(){
for(int i = 0; i < DTCSU_NUMBERS; ++i)
nxt[i] = NIL;
for(int i = 0; i < MOD; ++i)
head[i] = NIL;
n = 0;
}
void init(){
for(int i = 0; i < DTCSU_NUMBERS; ++i)
nxt[i] = NIL;
for(int i = 0; i < MOD; ++i)
head[i] = NIL;
n = 0;
}
void add(T x){
int list = hash(x);
key[n] = x;
nxt[n] = head[list];
head[list] = n;
++n;
}
void remove(T x){
int list = hash(x);
int l = head[list], prev = NIL;
while(l != NIL && key[l] != x){
prev = l;
l = nxt[l];
}
if(l != NIL && key[l] == x){
if(prev == NIL)
head[list] = nxt[l];
else
nxt[prev] = nxt[l];
}
}
bool find(T x){
int list = hash(x);
int l = head[list];
while(l != NIL && key[l] != x)
l = nxt[l];
return l != NIL;
}
void clear(){
init();
}
};
HashTable<unsigned long long> f{};
int main(){
long long x;
int queries;
for(int i = 0; i < DTCSU_NUMBERS; ++i){
fin >> x;
f.add(x);
}
int cnt = 0;
fin >> queries;
for(int query = 0; query < queries; ++query){
fin >> x;
cnt += f.find(x);
}
fout << cnt << '\n';
fin.close();
fout.close();
return 0;
}