Pagini recente » Cod sursa (job #1378671) | Cod sursa (job #539550) | Cod sursa (job #1156159) | Monitorul de evaluare | Cod sursa (job #1039454)
#include<cstdio>
#include<cstdlib>
#include<ctype.h>
#include<iostream>
#include<unordered_set>
#include<set>
using namespace std;
FILE *f = fopen("dtcsu.in","r");
FILE *g = fopen("dtcsu.out","w");
#define MaxS 100
#define M 276997
#define ll long long
#define MaxDoi 100
int T,Sol;
ll x;
char S[MaxS];
ll Doi[MaxDoi];
int echiv[MaxDoi];
unordered_set<ll> Q;
inline ll getInt(void)
{
ll nr = 0;
for(int i=0;isdigit(S[i]);nr = nr * 10 + S[i++]-'0');
return nr;
}
void citire(void)
{
ll x;
for(int i=1;i<=M;i++)
{
fgets(S,sizeof(S),f);
x = getInt();
if(x&1)
Q.insert(x);
}
}
void preprocesare(void)
{
Doi[1] = (1<<1)-1;
Doi[2] = (1<<2)-1;
Doi[3] = (1<<4)-1;
Doi[4] = (1<<8)-1;
Doi[5] = (1<<16)-1;
Doi[6] = (1LL<<32)-1;
echiv[1] = 1; echiv[2] = 2; echiv[3] = 4;
echiv[4] = 8; echiv[5] = 16; echiv[6] = 32;
//for(int i=1;i<=6;i++)
// cout << Doi[i] << "\n";
}
inline int exist(ll val)
{
for(int i=6;i;i--)
if((val&Doi[i]) == 0)
val >>= echiv[i];
//for(;(val&1) == 0;val >>= 1);
//cout << val << "\n";
if(Q.find(val) != Q.end())
return 1;
return 0;
}
int main()
{
citire();
preprocesare();
fscanf(f,"%d\n",&T);
for(int i=1;i<=T;i++)
{
fgets(S,sizeof(S),f);
x = getInt();
Sol += exist(x);
}
fprintf(g,"%d\n",Sol);
}