Cod sursa(job #1466014)

Utilizator DEFINEtelyEngineersUPB Pirtoaca Vasilescu Zamfiratos DEFINEtelyEngineers Data 28 iulie 2015 14:06:48
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.37 kb
#include<iostream>
#include<fstream>
#include<string.h>
#define MOD 666013
using namespace std;
 
struct nod
{
    int info;
    nod* urm;
};
 
void add(nod *&start, int _info)
{    
     if(start == NULL)
     {
         start = new nod;
         start->info = _info;
         start->urm = NULL;
     } else
     {
         nod *aux = start;
         bool gasit = false;
 
         if(aux->info == _info)
             gasit = true;
 
         while(aux->urm)
         {
             if(aux->info == _info)
             {
                 gasit = true;
                 break;
             }
             aux = aux->urm;             
         }
 
         if(!gasit)
         {
             nod *n = new nod;
             n->info = _info;
             n->urm = NULL;
             aux->urm = n;
         }
     }
}
 
void del(nod *&start, int _info)
{
    if(start!= NULL && start->info == _info)
    {
        nod *n = start;
        start = start->urm;
        delete n;
    } else
    {
        nod *n = start;
 
        while(n!= NULL)
        {
            if((n->urm!= NULL) && (n->urm->info == _info))
                break;
 
            n = n->urm;
        }
 
        if(n!=NULL)
        {
            nod *toDel = n->urm;
            n->urm = n->urm->urm;
            delete toDel;
        }
    }
}
 
 
void list(nod *start)
{
    while(start)
    {
        cout<<start->info<<" ";
        start = start->urm;
    }
    cout<<endl;
}
 
bool find(nod *start, int _info)
{
    nod *n = start;
    bool gasit = false;
    while((n!= NULL) && !gasit)
    {
        if(n->info == _info)
            gasit = true;
 
        n = n->urm;
    }
 
    return gasit;
}
 
int main()
{
    
    ifstream fin("hashuri.in");
    freopen("hashuri.out", "w", stdout);
    int N;
    fin>>N;
 
    int a,b;
    nod **n = new nod*[MOD];
 
    for(int i=0;i<MOD;i++)
        n[i] = NULL;
	
    for(int i=0;i<N;i++)
    {
        fin>>a>>b;
        if(a == 1)
        {
            add(n[b%MOD], b);
        } else if(a==2)
        {
            del(n[b%MOD], b);
        } else if(a==3)
        {
            if(find(n[b%MOD], b) == true)
                printf("1\n");
            else
                printf("0\n");
        }        
    }
  
    delete[] *n; 
    fin.close();
    return 0;
}