Cod sursa(job #2771311)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 26 august 2021 15:27:36
Problema Dtcsu Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <bits/stdc++.h>

using namespace std;

typedef unsigned long long ull;
const int BUFFSIZE(4028);
class InParser{
private:
    FILE *fin;
    char *buffer;
    int poz;
    char get_char(){
        ++poz;
        if(poz == BUFFSIZE){
            fread(buffer, 1, BUFFSIZE, fin);
            poz = 0;
        }
        return buffer[poz];
    }
public:
    InParser(const char *fisier){
        fin = fopen(fisier, "r");
        poz = BUFFSIZE - 1;
        buffer = new char[BUFFSIZE]();
    }
    InParser& operator >>(ull& n){
        char c;
        while(!isdigit(c = get_char()));
        n = c - '0';
        while(isdigit(c = get_char()))
            n = n * 10 + c - '0';
        return *this;
    }
};
InParser fin("dtcsu.in");
ofstream fout("dtcsu.out");
const int BITS(22);
int MASK = (1 << BITS) - 1;
char bloomFilter[(1 << BITS) >> 3];
int main()
{
    for(int i = 1; i <= 276997; ++i){
        ull x;
        fin >> x;
        bloomFilter[(x & MASK) >> 3] |= (1 << ((x & MASK) & 7));
    }
    ull q;
    fin >> q;

    int rez = 0;
    for(int i = 1; i <= q; ++i){
        ull val;
        fin >> val;
        if(val && (bloomFilter[(val & MASK) >> 3] & (1 << ((val & MASK) & 7)))){
            while(val % 2 == 0)
                val >>= 1;
            while(val % 3 == 0)
                val /= 3;
            while(val % 5 == 0)
                val /= 5;
            while(val % 7 == 0)
                val /= 7;
            while(val % 11 == 0)
                val /= 11;
            rez += (val == 1);
        }
    }
    fout << rez << '\n';
    return 0;
}