Cod sursa(job #2233314)

Utilizator Stefan_PiscuPiscu Stefan Constantin Stefan_Piscu Data 22 august 2018 21:34:35
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <fstream>
using namespace std;

ifstream fin("hashuri.in");
ofstream fout("hashuri.out");

const int hashSize=666013;

struct item{
                int nr;
                item *nextItem;
           }*Hash[hashSize];

void addNumber(int x)
{
    item *pivot=new item;
    int r=x%hashSize;
    pivot=Hash[r];
    while(pivot&&pivot->nr!=x) pivot=pivot->nextItem;
    if(pivot==NULL)
    {
        pivot=new item;
        pivot->nr=x;
        pivot->nextItem=Hash[r];
        Hash[r]=pivot;
    }
}

void deleteNumber(int x)
{
    item *pivot=new item;
    item *prevItem=NULL;
    int r=x%hashSize;
    pivot=Hash[r];
    while(pivot&&pivot->nr!=x) prevItem=pivot, pivot=pivot->nextItem;
    if(pivot)
    {
        item *toDelete=pivot;
        if(prevItem==NULL) Hash[r]=Hash[r]->nextItem, delete toDelete;
        else
        {
            prevItem->nextItem=pivot->nextItem;
            delete toDelete;
        }
    }
}

void checkNumber(int x)
{
    item *pivot=new item;
    int r=x%hashSize;
    pivot=Hash[r];
    while(pivot&&pivot->nr!=x) pivot=pivot->nextItem;
    if(pivot) fout<<1<<"\n";
    else fout<<0<<"\n";
}


int main()
{
    int n, op, x;
    fin>>n;
    for(int i=1;i<=n;++i)
    {
        fin>>op>>x;
        if(op==1) addNumber(x);
        else if(op==2) deleteNumber(x);
        else checkNumber(x);
    }
    return 0;
}