Cod sursa(job #1058516)

Utilizator 3nTRoPYiorga dan 3nTRoPY Data 15 decembrie 2013 17:07:12
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.85 kb
#include <fstream>
#include <iostream>

using namespace std;

struct col
{
 			 short val;
 			 col *next;
};

struct linie
{
       col *prim;
			 linie *next; 			 
}*p;

void ad(int x)
{
 		 int lin=x/666013+1, i=0;
 		 linie *tl=p, *adl;
 		 col *tc, *adc;
 		 for(i=0;i<lin;i++)
 		 {
          if(!tl->next)
          {
             adl=new linie;
             adl->prim=new col;
             adl->prim->next=NULL;
             adl->next=NULL;
             tl->next=adl;
			    }
          tl=tl->next;
     }
     tc=tl->prim;
     while(tc->next)
     {
		      tc=tc->next;
					if(tc->val==x%666013)
					   return;
     }
     adc=new col;
     adc->next=NULL;
     adc->val=x%666013;
     tc->next=adc;
}

void st(int x)
{
 		 int lin=x/666013+1, i=0;
 		 linie *tl=p;
 		 col *t;
 		 col *tc;
 		 for(i=0;i<lin;i++)
 		 {
			 if(!tl->next)
			    return;
			 tl=tl->next;
     }
     tc=tl->prim;
     while(tc->next)
     {
					if(tc->next->val==x%666013)
					{
			       t=tc->next;
					   tc->next=tc->next->next;
					   delete t;
					   return;
				  }
				  tc=tc->next;
     }
}

int search(int x)
{
 		int lin=x/666013+1, i=0;
 		linie *tl=p;
 		for(i=0;i<lin;i++)
 		{
			if(!tl->next)
			   return 0;
      tl=tl->next;
    }
    col *tc=tl->prim->next;
    while(tc)
    {
			   if(tc->val==x%666013)
			      return 1;
         tc=tc->next;
    }
 		return 0;
}

int main(int argc, char *argv[])
{
 		int n, op, x, i;
 		p=new linie;
 		p->prim=new col;
 		p->prim->next=NULL;
 		p->next=NULL;
 		ifstream fin("hashuri.in");
 		ofstream fout("hashuri.out");
 		fin>>n;
 		for(i=0;i<n;i++)
 		{
			  fin>>op>>x;
			  if(op==1)
			     ad(x);
        else if(op==2)
           st(x);
        else
           fout<<search(x)<<endl;
    }
    return 0;
}