Cod sursa(job #2794974)

Utilizator andrei_marciucMarciuc Andrei andrei_marciuc Data 5 noiembrie 2021 19:15:21
Problema Dtcsu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#pragma GCC optimize("O3")
#include <unordered_map>
#include <stdio.h>
#include <ctype.h>

inline int readINT( FILE *fin ) {
    int ch, rez = 0;
    while( !isdigit( ( ch = fgetc( fin ) ) ) );
 
    do
        rez = rez * 10 + ch - '0';
    while( isdigit( ( ch = fgetc( fin ) ) ) );
 
    return rez;
}

std::unordered_map<int, int> v;
int Exp[] = { 30, 16, 8, 4, 2, 1 };
int Pow[ 6 ], rez;

int main()
{
    for( int i = 0; i < 6; i++ )
        Pow[ i ] = 1 << Exp[ i ];

    FILE *fin = fopen( "dtcsu.in", "r" );

    for( int i = 0; i < 276997; i++ ) {
        int x = readINT( fin );
        if( x & 1 )
            v[ x ] = i;
    }

    int n = readINT( fin );
    for( int i = 0; i < n; i++ ) {
        int val = readINT( fin );

        if( !( val & 1 ) ) {
            if( !( val & Pow[ 0 ] - 1 ) )
                val >>= 30;
            if( !( val & Pow[ 1 ] - 1 ) )
                val >>= 16;
            if( !( val & Pow[ 2 ] - 1 ) )
                val >>= 8;
            if( !( val & Pow[ 3 ] - 1 ) )
                val >>= 4;
            if( !( val & Pow[ 4 ] - 1 ) )
                val >>= 2;
            if( !( val & Pow[ 5 ] - 1 ) )
                val >>= 1;
        }

        rez += ( v.find( val ) != v.end() );
    }

    FILE *fout = fopen( "dtcsu.out", "w" );
    fprintf( fout, "%d\n", rez );
    fclose( fout );
    return 0;
}