Cod sursa(job #1014175)

Utilizator nicolaetitus12Nicolae Titus nicolaetitus12 Data 22 octombrie 2013 12:30:31
Problema Hashuri Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.53 kb
#include <stdio.h>
#define N 1000037
struct node
{
    int n;
    node* next;
    node(int i, node* ne)
    {   n=i;
        next=ne;
    }
};
node* array[N];

void insert(int k)
{
    int i=k%N; 
    if(array[i]==NULL)
    {   array[i]=new node(k,NULL);   
    } 
    else
    {   node* p; 
        for(p=array[i];p->next!=NULL;p=p->next)
        {}
        p->next=new node(k,NULL); 
    }
}

void remove(int k)
{   
    int i=k%N;
    node* aux; 
    if(array[i]!=NULL)
    {
        if(array[i]->n==k)
        {
            aux=array[i]->next;
            delete array[i];
            array[i]=aux;
            return;
        }

        for(node* p=array[i]; p->next!=NULL ; p=p->next)
        {
            if(p->next->n==k)
            {   
                node* aux=p->next->next; 
                delete p->next;
                p->next=aux;
            }
        }
    }
}

int query(int k)
{   
    int i=k%N;
    for(node *p=array[i];p!=NULL;p=p->next)
    {
        if(p->n==k)
        {   return 1; 
        }
    } 
    return 0;
}

int main ()
{
    FILE *fin=fopen("hashuri.in","r");   
    FILE *fout=fopen("hashuri.out","w");   
    int n,i,f,k;
    fscanf(fin,"%d",&n);
    for(i=0;i<n;i++)
    {
        fscanf(fin,"%d %d",&f,&k);
        switch(f)
        {
            case 1:
                    insert(k); 
                    break; 

            case 2: remove(k);
                    break; 

            case 3: fprintf(fout,"%d\n",query(k));
                    break; 
        }
    } 
   
 
    fclose(fout);     
    return 0;
}