Pagini recente » Cod sursa (job #12044) | Cod sursa (job #289819) | Cod sursa (job #177990) | Cod sursa (job #426199) | Cod sursa (job #1043752)
#include<cstdio>
#include<bitset>
#define NMAX 276997
#define LL long long
#define LMAX 5500000
using namespace std;
FILE *fin,*fout;
int v[]={3,5,7,11},q,sol,L;
LL n,nr;
bitset<LMAX> use;
const int SZ=10000;
char input[SZ+1],*in;
union TIP
{
LL n;
char x[8];
}Var;
LL conv()
{
LL nr=0;
for(;!(*in>='0' && *in<='9') && *in;in++);
if(in==input+SZ)
{
fread(input,1,SZ,fin);
in=input;
}
for(;*in>='0' && *in<='9';in++)
{
nr=nr*10+(*in-'0');
if(in+1==input+SZ)
{
fread(input,1,SZ,fin);
in=input-1;
}
}
return nr;
}
int MurmurHash2 ( const char * key, int len, unsigned int seed )
{
const unsigned int m = 0x5bd1e995;
const int r = 24;
unsigned int h = seed ^ len;
const unsigned char * data = (const unsigned char *)key;
for(unsigned int k;len >= 4;data += 4,len -= 4)
{
k = *(unsigned int *)data;
k *= m;
k ^= k >> r;
k *= m;
h *= m;
h ^= k;
}
switch(len)
{
case 3: h ^= data[2] << 16;
case 2: h ^= data[1] << 8;
case 1: h ^= data[0];
h *= m;
};
h ^= h >> 13;
h *= m;
h ^= h >> 15;
return h%LMAX;
}
int FNV(char *x)
{
unsigned LL hash = 14695981039346656037ULL;
for(int i=0;i<L;i++)
{
hash = (hash%LMAX) * 1099511628211LL;
hash = hash^x[i];
}
return hash%LMAX;
}
int main()
{
fin=fopen("dtcsu.in","r");
fout=fopen("dtcsu.out","w");
fread(input,1,SZ,fin);
in=input;
for(int i=0;i<NMAX;i++)
{
Var.n=conv();
use[MurmurHash2(Var.x,8,454645)]=1;
use[FNV(Var.x)]=1;
}
q=conv();
for(;q;q--)
{
Var.n=conv();
if(!use[MurmurHash2(Var.x,8,454645)] || !use[FNV(Var.x)])
continue;
for(int i=0;i<4;i++)
for(;Var.n%v[i]==0;Var.n/=v[i]);
sol+=((Var.n&(Var.n-1))==0);
}
fprintf(fout,"%d",sol);
return 0;
}