Cod sursa(job #711072)

Utilizator StefanLacheStefan Lache StefanLache Data 11 martie 2012 11:52:52
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include<stdio.h>
#include<stdlib.h>
#define nr 666013
struct nod
{
    int info;
    nod *adr_urm;
};
nod *v[666012];
int cauta(nod *v[],int x)
{
     int i=x % nr;                               //functia hash este  h(x)=x%nr
     while(v[i])
             {
                 if(v[i]->info == x)
                    return 1;
                 v[i]=v[i]->adr_urm;
             }
     return 0;
}
void insert(nod *v[],int x)
{
     int i=x%nr;
     if(cauta(v,x)==0)
     {
         nod *p=(nod *)malloc(1*sizeof(nod));
        p->info=x;
        p->adr_urm=v[i];
        v[i]=p;
     }
}
void sterge(nod *v[],int x)
{
    if(cauta(v,x)==1)
    {
      int i=x%nr;
      if(v[i]->info == x)
            {
                v[i]=v[i]->adr_urm;
                return ;
            }
      while(v[i]->adr_urm->info != x)
            v[i]=v[i]->adr_urm;
      v[i]->adr_urm = v[i]->adr_urm->adr_urm;
    }
}
int main()
{
    int n,i,N,op,x;
    FILE *f=fopen("hashuri.in","rt");
    FILE *g=fopen("hashuri.out","wt");
    fscanf(f,"%i",&N);
    for(i=0;i<N;i++)
        {
           fscanf(f,"%i%i",&op,&x);
           if(op==1)

                        insert(v,x);

            if(op==2)

                    sterge(v,x);

                else if(op==3)

                            fprintf(g,"%i\n",cauta(v,x));


        }

    return 0;
}