Cod sursa(job #1968603)

Utilizator Laura_CorneiLaura Maria Cornei Laura_Cornei Data 17 aprilie 2017 19:25:55
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include <stdint.h>
#include <fstream>
#define nmax 1000001
#define pmax 666013
using namespace std;
fstream f1("hashuri.in", ios::in);
fstream f2("hashuri.out", ios::out);
int32_t n;
const int32_t pr=666013;
struct nod
{
    nod *urm;
    int32_t val;
} *t[pmax];///creare vector de inceputuri de liste
/*int32_t h(int32_t x)
{
    return x%p;
}*/
void add(int32_t x)///adaugi val x in fata listei coresp
{
    nod *p= new nod;
    p->val=x;
    p->urm=t[x%pr];
    t[x%pr]=p;
}
int32_t search_h(int32_t x)
{
    nod *p;
    for(p=t[x%pr]; p!=0; p=p->urm)
        if(p->val==x) return 1;
    return 0;
}
void delete_h(int32_t x)
{
    nod *p, *q;
    int32_t aux;
    for(p=t[x%pr]; (p!=0)&&(p->val!=x); p=p->urm);
    if(p!=0) ///daca ai ce sterge
    {
        ///interschimbi inf din p cu cea din p->urm
        ///si stergi nodul p->urm
        if(p->urm==0)
        {
            p->val=0;
        }
        else
        {
            aux=p->val;
            p->val=p->urm->val;
            p->urm->val=aux;

            q=p->urm;
            p->urm=p->urm->urm;
            delete q;
        }
    }

}
int main()
{
    int32_t i, x;
    int16_t  val;
    f1>>n;
    for(i=1; i<=n; i++)
    {
        f1>>val>>x;
        if(val==1) {if(!search_h(x)) add(x);}////adaugi x la lista t[h[x]] daca nu era deja
        else if(val==2) delete_h(x);///sterge x daca exista
             else if(val==3) f2<<search_h(x)<<"\n";///afis 1 daca x este in multime
    }

    return 0;
}