Cod sursa(job #812399)

Utilizator costyv87Vlad Costin costyv87 Data 13 noiembrie 2012 20:25:06
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <cstdio>
#include <vector>
#include <string>
#include <list>
#include <algorithm>
#define md 666073;
int dx[8]={-1,-1,0,+1,+1,+1,0,-1};
int dy[8]={0,+1,+1,+1,0,-1,-1,-1};
using namespace std;
FILE *f,*g;
list <int> v[666073];
int y,x,t,i,n;

inline long long hash(int x)
{
    return (long long)x*y%md;
}

void add(int x)
{
    int i;
    list <int> ::iterator j;
    i=hash(x);

    for (j=v[i].begin();j!=v[i].end();j++)
        if (*j==x) return ;
    v[i].push_back(x);
}

void remove(int x)
{
    int i;
    list <int> :: iterator j;
    i=hash(x);

    for (j=v[i].begin();j!=v[i].end();j++)
        if (*j==x)
        {
            v[i].erase(j);
            return ;
        }
}

int query(int x)
{
    int i;
    list <int> :: iterator j;
    i=hash(x);

    for (j=v[i].begin();j!=v[i].end();j++)
        if (*j==x)
            return 1;
    return 0;
}


int main()
{
	f=fopen("hashuri.in","r");
	g=fopen("hashuri.out","w");


    y=rand() % 100000;

    fscanf(f,"%d",&n);
    for (i=1;i<=n;i++)
    {
        fscanf(f,"%d%d",&t,&x);
        switch (t)
        {
            case 1 : add(x); break;
            case 2 : remove(x); break;
            case 3 : fprintf(g,"%d\n",query(x)); break;
        }

    }


	fclose(g);
	return 0;
}