Cod sursa(job #1692087)

Utilizator felixiPuscasu Felix felixi Data 20 aprilie 2016 08:12:15
Problema Dtcsu Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <fstream>
#include <vector>
 
using namespace std;
 
ofstream out("dtcsu.out");
 class input_reader {
    private:
        FILE *input_file;
        static const int SIZE = 150000;
        char buffer[SIZE]; int cursor;
 
        inline void advance() {
            if( ++cursor == SIZE ) {
                cursor = 0;
                fread( buffer, SIZE, 1, input_file );
            }
 
            return;
        }
 
        inline char current() {
            return buffer[cursor];
        }
    public:
        input_reader( const char *file_name, const char *file_type ) {
            input_file = fopen( file_name, file_type ); cursor = 0;
            fread( buffer, SIZE, 1, input_file );
        }
 
        template <class type>
        input_reader &operator >>( type &value ) {
            value = 0;
 
            while( current() < '0' || current() > '9' )
                advance();
 
            while( current() >= '0' && current() <= '9' ) {
                value = value * 10 + ( current() - '0' );
                advance();
            }
 
            return *this;
        }
} in( "dtcsu.in", "r" );
typedef long long I64;
 
const int NMAX = 276997;
const int MOD  = 9013;
 
vector <I64> H[MOD+1];
 
void Push_hash( I64 nr ) {
    int key = nr % MOD;
    H[key].push_back( nr );
}
 
bool Check_hash( I64 nr ) {
    int key = nr % MOD;
    for( int i = 0;  i < (int)H[key].size();  ++i ) {
        if( H[key][i] == nr )  return 1;
    }
    return 0;
}
 
int main() {
    for( int i = 1;  i <= NMAX;  ++i ) {
        I64 nr;  in>> nr;
								  if(nr&1) Push_hash( nr );
    }
    int Q, Ans = 0;
    in >> Q;
    for( int i = 1;  i <= Q;  ++i ) {
        I64 nr;  in >> nr;
								  while(!(nr&1)) nr>>=1;
        Ans += Check_hash( nr );
    }
    out << Ans << '\n';
    return 0;
}