Pagini recente » Cod sursa (job #2190885) | Cod sursa (job #2645503) | Cod sursa (job #763060) | Cod sursa (job #1564699) | Cod sursa (job #336253)
Cod sursa(job #336253)
#include <stdio.h>
#include <vector>
#define mod 10
using namespace std;
struct lista
{
lista *nxt;
lista *prev;
int val;
};
lista *a[mod];
lista *p[mod];
lista *aux;
bool find(int nr)
{
int key = nr % mod;
while (a[key] != 0)
{
if (a[key]->val == nr)
{
a[key] = p[key];
return true;
}
a[key] = a[key]->nxt;
}
a[key] = p[key];
return false;
}
inline void insert(int nr)
{
int key = nr % mod;
if (a[key] == 0)
{
a[key] = new lista;
a[key]->prev = 0;
a[key]->nxt = 0;
a[key]->val = nr;
p[key] = a[key];
return;
}
else
{
while (a[key]!=0)
{
if (a[key] !=0)
{
aux = a[key];
}
a[key] = a[key]->nxt;
}
a[key] = new lista;
a[key]->prev = aux;
aux->nxt = a[key];
a[key]->nxt = 0;
a[key]->val = nr;
a[key] = p[key];
}
}
inline void del(int nr)
{
int key = nr % mod;
while (a[key] !=0)
{
if (a[key]->val == nr)
{
if (a[key]->nxt == 0 && a[key]->prev == 0)
{
delete a[key];
a[key] = 0;
p[key] = 0;
return;
}
if (a[key]->prev == 0)
{
p[key] = a[key]->nxt;
a[key]->nxt->prev = 0;
delete a[key];
a[key] = 0;
a[key] = p[key];
return;
}
if (a[key]->nxt == 0)
{
a[key]->prev->nxt = 0;
delete a[key];
a[key] = 0;
a[key] = p[key];
return;
}
a[key]->prev->nxt = a[key]->nxt;
a[key]->nxt->prev = a[key]->prev;
delete a[key];
a[key] = p[key];
return;
}
a[key] = a[key]->nxt;
}
a[key] = p[key];
}
int main()
{
freopen("hashuri.in","r",stdin);
freopen("hashuri.out","w",stdout);
int n,s,op,i;
scanf("%d",&n);
for (i=0;i<n;i++)
{
scanf("%d%d",&op,&s);
{
switch(op)
{
case 1:
if (!find(s))
{
insert(s);
}
break;
case 2:
if (find(s))
{
del(s);
}
break;
case 3:
if (find(s))
{
printf("1\n");
}
else
{
printf("0\n");
}
break;
}
}
}
return 0;
}