Pagini recente » Cod sursa (job #1245581) | Cod sursa (job #2016638) | Rating Ionescu Andrei (ionescuandrei1402) | pregoni2 | Cod sursa (job #2003386)
#include <cstdio>
#include <ctype.h>
typedef long long i64;
const int NR_BAZE = 4;
const int MAX_BAZA = 500000;
const int MADJICK = 276997;
const int MADJICKHASH = 499979;
const int BUFF = 4096;
char bloom[MAX_BAZA];
int base[NR_BAZE] = {499979, 499973, 499969, 499957};
char buftea[BUFF];
int curs = BUFF - 1;
static inline char getch(FILE *fin) {
++curs;
if(curs == BUFF) {
curs = 0;
fread(buftea, 1, BUFF, fin);
}
return buftea[curs];
}
static inline i64 getnr(FILE *fin) {
i64 nr = 0LL;
char ch = getch(fin);
while(!isdigit(ch))
ch = getch(fin);
while(isdigit(ch)) {
nr = nr * 10 + ch - '0';
ch = getch(fin);
}
return nr;
}
static inline void upd(i64 x) {
for(int i = 0; i < NR_BAZE; ++i)
bloom[x % base[i]] ^= (1 << i);
}
static inline int query(i64 x) {
for(int i = 0; i < NR_BAZE; ++i)
if(!(bloom[x % base[i]] & (1 << i)))
return false;
return true;
}
int main() {
int s = 0, q;
i64 x;
FILE *fin = fopen("dtcsu.in", "r");
for(int i = 0; i < MADJICK; ++i) {
x = getnr(fin);
if(x & 1)
upd(x);
}
q = getnr(fin);
for(int i = 0; i < q; ++i) {
x = getnr(fin);
while(!(x & 1))
x >>= 1;
s += query(x);
}
fclose(fin);
FILE *fout = fopen("dtcsu.out", "w");
fprintf(fout, "%d", s);
fclose(fout);
return 0;
}