Cod sursa(job #1765028)

Utilizator ReksioCroftOctavian Florin Staicu ReksioCroft Data 26 septembrie 2016 10:52:57
Problema Hashuri Scor 100
Compilator c Status done
Runda cerculdeinfo-lectia1-hashuri.rabinkarp Marime 1.38 kb
# include <stdio.h>
# include <stdlib.h>
# define Mod 702113

typedef struct _lista
{
   int info;
   struct _lista *next;
}lista;
lista *Hash[Mod];

void add( int val ){
    lista *q = (lista*)malloc(sizeof(lista));
    q -> info = val;
    q -> next = Hash[val%Mod];
    Hash[val%Mod] = q;
}

int find( int val ){
    lista *q = Hash[val % Mod];
    while( q!=0 && q->info!=val )
        q = q -> next;
    return ( q != 0 );
}

void erase( int val ){
    lista *q, *aux;
    q = Hash[val % Mod];
    if( q!=0 && q->info == val){
        aux = Hash[val % Mod];
        Hash[val % Mod] = Hash[val % Mod] -> next;
        free( aux);
    }
    else{
        while( q!=0 && q->info != val )
            q = q -> next;
        if( q!= 0 ){
            aux = q;
            q = aux -> next;
            free(aux);
        }
    }
}

int main()
{
    int n, i, op, val;
    FILE *fin, *fout;
    fin = fopen( "hashuri.in", "r" );
    fout = fopen( "hashuri.out", "w" );
    fscanf( fin, "%d", &n );
    for( i=1; i<=n; i++ ){
        fscanf( fin, "%d%d", &op, &val );
        if( op == 1 ){
            if( find(val)==0 )
                add( val );
        }
        else if( op == 2 )
            erase( val );
        else if( op == 3 )
            fprintf( fout, "%d\n", find( val ) );
    }
    fclose( fin );
    fclose( fout );

    return 0;
}