Cod sursa(job #1665437)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 26 martie 2016 22:45:03
Problema Dtcsu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <bits/stdc++.h>
#include <tr1/unordered_set>

using namespace std;

tr1 :: unordered_set <long long> my_set;
int N, answer; long long X;

class input_reader {
    private:
        FILE *input_file;
        static const int SIZE = 1 << 17;
        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;
        }
} input_file( "dtcsu.in", "r" );
FILE *output_file = fopen( "dtcsu.out", "w" );

int main() {

    for( int i = 1; i <= 276997; i ++ ) {
        input_file >> X;

        if( (X & 1) == 1 )
            my_set.insert(X);
    }

    input_file >> N;
    for( int i = 1; i <= N; i ++ ) {
        input_file >> X;

        if( (X & 1) == 0 && (X & (-X)) != 0 )
            X /= (X & (-X));

        if( my_set.count(X) )
            answer ++;
    }

    fprintf( output_file, "%d\n", answer );

    return 0;
}