Cod sursa(job #2106526)

Utilizator AnduRazvanMindrescu Andu AnduRazvan Data 15 ianuarie 2018 21:02:31
Problema Hashuri Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.13 kb
#include <stdio.h>
#include <stdlib.h>
#define prim 666013

void insert(int ***v,int x,int **ap)
{ int i;
  int loc=x%prim;
  for(i=0;i<(*ap)[loc];i++)
   if((*v)[loc][i]==x) return;
   (*ap)[loc]++;
   (*v)[loc]=realloc((*v)[loc],(*ap)[loc]*sizeof(int));
   (*v)[loc][(*ap)[loc]-1]=x;
}
void del(int ***v,int x,int **ap)
{ int i,j;
  int loc=x%prim,ok=0;
  for(i=0;i<(*ap)[loc];i++)
   if((*v)[loc][i]==x) {ok=1;break;}
  if(ok==0) return;
  if(ok==1)
     (*v)[loc][i]=(*v)[loc][(*ap)[loc]-1];
   (*v)[loc]=realloc((*v)[loc],((*ap)[loc]-1)*sizeof(int));
  (*ap)[loc]--;
}
int search(int **v,int x,int *ap)
{ int i,j;
  int loc=x%prim,ok=0;
  for(i=0;i<ap[loc];i++)
   if(v[loc][i]==x) {ok=1;break;}
     return ok;
}

int main()
{ int n,op,x;
  FILE *f=fopen("hashuri.in","r");
  FILE *g=fopen("hashuri.out","w");
  fscanf(f,"%d",&n);
  int **v=(int**)malloc(prim*sizeof(int*));
  int *ap=(int*)calloc(prim,sizeof(int));
  int i;
for(i=0;i<n;i++)
  {fscanf(f,"%d %d",&op,&x);
   if(op==1) insert(&v,x,&ap);
   if(op==2) del(&v,x,&ap);
   if(op==3) fprintf(g,"%d\n",search(v,x,ap));
  }

    return 0;
}