Pagini recente » Cod sursa (job #1229080) | Istoria paginii utilizator/anca.gd | Cod sursa (job #872343) | Cod sursa (job #1854189) | Cod sursa (job #611879)
Cod sursa(job #611879)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MODULO 200000
#define HASH(x) (x)%MODULO
#define infile "hashuri.in"
#define outfile "hashuri.out"
typedef struct NODE{
struct NODE *next;
int data;
}NODE;
void add(NODE *x, int number)
{
NODE *a = x;
while(a->next && (a->next->data <= number)){
if(a->next->data == number)
return;
a = a->next;
}
NODE *newNode = (NODE*)malloc(sizeof(NODE));
newNode->next = a->next;
newNode->data = number;
a->next = newNode;
}
void rem(NODE *x, int number)
{
NODE *a = x;
NODE *b;
while(a->next){
if(a->next->data == number){
b = a->next;
a->next = a->next->next;
free(b);
return;
}
if(a->next->data > number)
return;
a = a->next;
}
}
int exists(NODE *x, int number)
{
NODE *a = x;
while(a->next){
if(a->next->data == number)
return 1;
else if(a->next->data > number)
return 0;
a = a->next;
}
return 0;
}
int main()
{
NODE *table[MODULO];
int i;
int N;
FILE *f, *g;
f = fopen(infile,"r");
g = fopen(outfile,"w");
for(i = 0; i<MODULO; ++i){
table[i] = (NODE*)malloc(sizeof(NODE));
table[i]->next = NULL;
}
fscanf(f,"%d",&N);
for(i = 0; i<N; ++i){
int op, nr;
fscanf(f,"%d%d",&op,&nr);
switch(op){
case 1:
add(table[HASH(nr)], nr);
break;
case 2:
rem(table[HASH(nr)], nr);
break;
case 3:
fprintf(g,"%d\n",exists(table[HASH(nr)], nr));
break;
default:
return 1;
}
}
fclose(f);
fclose(g);
return 0;
}