Cod sursa(job #2794977)

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

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

std::unordered_map<long long, int> v;
long long Exp[] = { 30, 16, 8, 4, 2, 1 };
long long 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++ ) {
        long long x = readINT( fin );
        if( x & 1 )
            v[ x ] = i;
    }

    long long n = readINT( fin );
    for( int i = 0; i < n; i++ ) {
        long long 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, "%lld\n", rez );
    fclose( fout );
    return 0;
}