Pagini recente » Cod sursa (job #2499591) | Cod sursa (job #200152) | Cod sursa (job #133800) | Cod sursa (job #1978853) | Cod sursa (job #304633)
Cod sursa(job #304633)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define nMax 1000001
int hFct(int x,int i)
{
return (x+i*(1+x%999997))%nMax;
}
void hInsert(int *hTable,int x)
{
int i,crt;
for (i=0;i<nMax;i++)
{
crt=hFct(x,i);
if (hTable[crt]==0)
{
hTable[crt]=x;
break;
}
else if (hTable[crt]==x)
{
break;
}
}
}
void hDelete(int *hTable,int x)
{
int i,crt;
for (i=0;i<nMax;i++)
{
crt=hFct(x,i);
if (hTable[crt]==x)
{
hTable[crt]=0;
break;
}
}
}
int hFind(int *hTable,int x)
{
int i,crt;
for (i=0;i<nMax;i++)
{
crt=hFct(x,i);
if (hTable[crt]==x)
{
return 1;
}
}
return 0;
}
int main()
{
FILE *fin,*fout;
fin=fopen("hashuri.in","r");
fout=fopen("hashuri.out","w");
int i,x,n,*hTable,cmd;
hTable=(int *)malloc(sizeof(int)*nMax);
memset(hTable,'\0',sizeof(int)*nMax);
fscanf(fin,"%d",&n);
for (i=0;i<n;i++)
{
fscanf(fin,"%d %d",&cmd,&x);
switch (cmd)
{
case 1:hInsert(hTable,x);
break;
case 2:hDelete(hTable,x);
break;
case 3:if (hFind(hTable,x))
fputs("1\n",fout);
else
fputs("0\n",fout);
break;
default:
break;
}
}
fclose(fin);
fclose(fout);
}