Cod sursa(job #1301836)

Utilizator deea101Andreea deea101 Data 26 decembrie 2014 13:57:50
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include <fstream>
#include <cstring>
#include <iostream>
using namespace std;
ifstream f("hashuri.in");
ofstream g("hashuri.out");

const int size=2000001;

class Hashtable
{
    private:
		struct slot
		{
			int key,state;
			
			slot() {state=0;} //state=0 - free; state=1 - full; state=-1 - was deleted
			
		}v[size];
        
        int hash(int key)
        {
            return (key%size);
        }
    public:
        
        void insert(int key)
        {
			if(lookup(key)) return;
			
            int h=hash(key);
            while(v[h].state==1)
            {
                h++;
                if(h==size) h=0;
            }

			v[h].key=key;
			v[h].state=1;
        }

        bool lookup(int key)
        {
            int h=hash(key);
            while(v[h].state!=0 && v[h].key!=key)
			{
                h++;
				if(h==size) h=0;
			}
            if(v[h].key==key) return 1;
            else return 0;
        }


        void remove(int key)
        {
			int h=hash(key);
			while(v[h].state!=0 && v[h].key!=key)
			{
				h++;
				if(h==size) h=0;
			}

			if(v[h].key==key) 
			{
				v[h].key=-1;
				v[h].state=-1;
			}
        }
}H;


int main()
    {
        int T,q,x;
        f>>T;
        while(T--)
        {
            f>>q>>x;
            switch (q)
            {
                case 1: H.insert(x); break;
                case 2: H.remove(x); break;
                case 3: g<<H.lookup(x)<<'\n';
            }
        }
		
		cout<<clock();
    }