Cod sursa(job #1048283)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 5 decembrie 2013 18:39:17
Problema Dtcsu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <fstream>
#include <cstdio>
#include <bitset>
using namespace std;

const int N = 276997;
int Q,out;

const int maxb=200000;
int ptr=0;
char buff[maxb];

inline long long GetLong (long long &nr)
{
    nr=0;
    while (buff[ptr]<'0' || buff[ptr]>'9')
        if ((++ptr)>=maxb)
        {
            ptr=0;
            fread(buff, 1, maxb, stdin);
        }

    while (buff[ptr]>='0' && buff[ptr]<='9')
    {
        nr=nr*10+buff[ptr]-'0';
        if ((++ptr)>=maxb)
        {
            ptr=0;
            fread(buff, 1, maxb, stdin);
        }
    }

    return nr;
}

const int f_size = 1000010;
const int mod[] = { 666013, 1000003 , 826663 , 797593 , 959473 };
const int val[] = { 15 , 3 , 5 , 7 , 11 };

bitset<f_size> filter[5];

void insert(long long x)
{
    for (int i=0;i<5;++i)
        filter[i][ x%mod[i] ] = 1;
}

int find(long long x)
{
    for (int i=0;i<5;++i)
        if ( filter[i][ x%mod[i] ] == 0 )
            return 0;
    return 1;
}

long long X;

int main()
{
    freopen("dtcsu.in","r",stdin);
    freopen("dtcsu.out","w",stdout);
    fread(buff, 1, maxb, stdin);
    for (int i=1;i<=N;++i)
    {
        long long X;
        GetLong(X);
        for (int i=0;i<5;++i)
            filter[i][ X%mod[i] ] = 1;
    }
    GetLong(X);
    Q = X;
    for (;Q;--Q)
    {
        GetLong(X);
        bool ok = 1;
        for (int i=0;i<5 && ok;++i)
            if ( filter[i][ X%mod[i] ] == 0 )
                ok = 0;
        if ( ok )
        {
           ++out;
        }
    }
    printf("%d\n",out);
}