Cod sursa(job #1110995)

Utilizator techLaurentiu Avasiloaie tech Data 18 februarie 2014 16:02:01
Problema Hashuri Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.77 kb
#include <stdio.h>
#include <fstream>
#define modulo 666013

using namespace std;

ifstream in ( "hashuri.in" ) ;

struct node
{
    unsigned int value;
    node *next ;
};

struct hash_table
{
    bool used ;
    node *next ;
};

hash_table vect[modulo] ;
node *p ;

unsigned int x ;
int n , tip , i , y ;

void insert_hash ()
{
    node *q ;
    q = new node ; q->value = x ; q->next = NULL ;

    if ( vect[y].used == 0 ) { vect[y].next = q ; vect[y].used = 1 ; }

    else
    {
        p = vect[y].next ;

        while ( p->next != NULL )
        {
            p = p->next ;
        }

        p->next = q ;
    }

}

void delete_hash ()
{
    if ( vect[y].used )
    {
        if ( vect[y].next->next == NULL )
        {
            vect[y].used = 0 ; vect[y].next = NULL ;
        }

        else
        {
            p = vect[y].next ;

            while ( p->next->next != NULL )
            {
                p = p->next ;
            }

            p->next = NULL ;
        }
    }
}

void call_hash ()
{
    if ( vect[y].used )
    {
        p = vect[y].next ;

        while ( p->value != x && p->next != NULL )
        {
                p = p->next ;
        }

        if ( p->value == x ) { printf ( "1\n" ) ; }
        else { printf ( "0\n" ) ; }
    }

    else
    {
        printf ( "0\n" ) ;
    }
}

int function_hash ()
{
    return ( x % modulo ) ;
}

int main()
{
    freopen ( "hashuri.out" , "w" , stdout ) ;

    in >> n ;

    for ( i = 1 ; i <= n ; i ++ )
    {
        in >> tip >> x ;

        y = function_hash() ;

        if ( tip == 1 ) { insert_hash() ; }
        else if ( tip == 2 ) { delete_hash() ; }
        else { call_hash() ; }
    }

    return 0;
}