Cod sursa(job #1705806)

Utilizator Tiberiu02Tiberiu Musat Tiberiu02 Data 20 mai 2016 23:38:45
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.45 kb
# include <iostream>

# include <vector>

# include <cstdio>

using namespace std;

const int HASH_SIZE = 4095; /// ( 1 << 20 ) - 1

class myHash {
    vector<int> v[HASH_SIZE];

    public:
        bool check( int val ) {
            int i, h;

            h = val & HASH_SIZE;

            i = 0;
            while ( i < v[h].size() && v[h][i] != val )
                i ++;

            return ( i < v[h].size() );
        }

        bool pop( int val ) {
            int i, h;

            h = val & HASH_SIZE;

            i = 0;
            while ( i < v[h].size() && v[h][i] != val  )
                i ++;

            if ( i < v[h].size() )
                v[h].erase( v[h].begin() + i );

            return ( i < v[h].size() );
        }

        void push( int val ) {
            int h = val & HASH_SIZE;

            v[h].push_back( val );
        }
};
/*
class buffer {
    private:
        char * text;
        int size;
        int pos;

        FILE *file;

        void refill( void ) {
            pos = 0;
            fread( text, 1, size, file );
        }

        char getc() {
            char c = text[pos ++];

            if ( pos == size )
                refill();

            return c;
        }

        int getnr() {
            char c = getc();
            int nr = 0;

            while ( c != EOF && c < '0' || '9' < c )
                c = getc();
            while ( '0' <= c && c <= '9' ) {
                nr = nr * 10 + c - '0';
                c = getc();
            }

            return nr;
        }

    public:
        buffer( char * path, int s = 131072 ) {
            size = s;

            text = (char *) malloc( size );
            file = fopen( path, "r" );

            refill();
        }

        buffer &operator>>( int &v ) {
            v = getnr();
            return *this;
        }

        buffer &operator>>( char &v ) {
            v = getc();
            return *this;
        }

        void close() {
            fclose( file );
            free( text );
        }
};
*/
class myHash m;

int main() {
    FILE * fin = fopen( "hashuri.in", "r" ), * fout = fopen( "hashuri.out", "w" );

    int n, i, t, nr;

    fscanf( fin, "%d", &n );

    for ( i = 0; i < n; i ++ ) {
        fscanf( fin, "%d%d", &t, &nr );

        if ( t == 1 )
            m.push( nr );
        else if ( t == 2 )
            m.pop( nr );
        else
            fprintf( fout, "%d\n", m.check( nr ) );
    }

    fclose( fin );
    fclose( fout );

    return 0;
}