Cod sursa(job #265155)

Utilizator dudu77tTudor Morar dudu77t Data 23 februarie 2009 14:23:47
Problema Hashuri Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 2.14 kb
#include <iostream>
#define p 181081

using namespace std;

struct NOD
{
    int val;
    struct NOD *next;
};

void add (int);
void remove (int);
void search (int);

NOD* list[p];
int n;

int main()
{
    int i, op, x;
 
    freopen ("hashuri.in", "r", stdin);
    freopen ("hashuri.out", "w", stdout);
    
    cin >> n;
    for (i = 1; i <= n; i++)
    {
        cin >> op >> x;
        if (op == 1)
        {
            add (x);
        }
        else if (op == 2)
        {
            remove (x);
        }
        else
        {
            search (x);
        }
    }
    return 0;
}

void search (int x)
{
    NOD *t;
    t = list[x%p];
    while (t)
    {
        if (t->val == x)
        {
            cout << "1\n";
            return;
        }
        t = t->next;
    }
    cout << "0\n";
}

void remove (int x)
{
    NOD *t, *u;
    if (!list[x%p])
    {
        return;
    }
    else
    {
        t = list[x%p];
        if (t->val == x)
        {
            list[x%p] = t->next;
            delete t;
        }
        else
        {
            u = t;
            while (1)
            {
                if (!t->next) return;
                t = t->next;
                if (t->val == x)
                {
                    u->next = t->next;
                    delete t;
                    return;
                }
                u = t;
            }
        }
    }
}

void add (int x)
{
    NOD *t;
    if (!list[x%p])
    {
        list[x%p] = new NOD;
        t = list[x%p];
        t->val = x;
        t->next = 0;
    }
    else
    {
        t = list[x%p];
        while (1)
        {
            if (t->val == x)
            {
                return;
            }
            else
            {
                if (t->next)
                {
                    t = t->next;
                }
                else
                {
                    t->next = new NOD;
                    t = t->next;
                    t->val = x;
                    t->next = NULL;
                }
            }
        }
    }
}