Cod sursa(job #950784)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 17 mai 2013 20:43:43
Problema Hashuri Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.55 kb
#include <fstream>
#include <list>

using namespace std;

#define mod1 666013
#define mod2 123456

list<int> v1[mod1];
list<int> v2[mod2];

list<int>::iterator find1(int x)
{
   int b=x%mod1;
   list<int>::iterator it;
   for(it=v1[b].begin();it!=v1[b].end();it++)
     if(*it==x)
       break;
   return it;
}

list<int>::iterator find2(int x)
{
   int b=x%mod2;
   list<int>::iterator it;
   for(it=v2[b].begin();it!=v2[b].end();it++)
     if(*it==x)
       break;
   return it;
}

void insert(int x)
{
   int b1=x%mod1;
   int b2=x%mod2;
      
   if(find1(x)==v1[b1].end() && find2(x)==v2[b2].end())  
   {
      if(v1[b1].size()<v2[b2].size())
           v1[b1].push_back(x);  
      else
           v2[b2].push_back(x);    
   }
}

void del(int x)
{
   int b1=x%mod1;
   int b2=x%mod2;
   
   list<int>::iterator it1=find1(x);
   list<int>::iterator it2=find2(x);
   
   if(it1!=v1[b1].end())
     v1[b1].erase(it1);
   
   if(it2!=v2[b2].end())
     v2[b2].erase(it2);     
}

int main()
{
    ifstream fin("hashuri.in");
    ofstream fout("hashuri.out");
    
    int n,cod,x,i;
    
    fin>>n;
    for(i=0;i<n;i++)
    {
       fin>>cod>>x;
       if(cod==1)
         insert(x);
       else if(cod==2)
         del(x);
       else
       {
          if(find1(x)!=v1[x%mod1].end() || find2(x)!=v2[x%mod2].end())
            fout<<"1\n";
          else
            fout<<"0\n";    
       }                
    }
    
    fin.close();
    fout.close();
    //system("PAUSE");
    return 0;
}