Cod sursa(job #678584)

Utilizator ion_calimanUAIC Ion Caliman ion_caliman Data 11 februarie 2012 22:52:08
Problema Hashuri Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
using namespace std;

ifstream f("hashuri.in");
ofstream g("hashuri.out");

#define M 1101011

int A[M], N, B[M], pr[100];

void eratostene(int n)
{
    int nr=0, i, j;
    for (i=2; i<n; i++) pr[i] = 1;
    for (i=2; i*i<n; i++)
        if (pr[i])
            for (j=i+i; j<n; j+=i) pr[j] = 0;
    for (i=2; i<n; i++)
        if (pr[i]) pr[nr++] = i;
}

int H(int x, int p)
{
    return ((x%M)*p)%M;
}

void insereaza(int x)
{
    int p=0;
    while (A[H(x,pr[p])] && A[H(x,pr[p])]!=x) p++;
    //g << "Nivel : " << pr[p] << '\n';
    A[H(x,pr[p])] = x;
    B[H(x,pr[p])] = 0;
}

void sterge(int x)
{
    int p=0;
    while ((A[H(x,pr[p])] || B[H(x,pr[p])]) && A[H(x,pr[p])]!=x) p++;
    A[H(x,pr[p])] = 0;
    B[H(x,pr[p])] = 1;
}

bool cauta(int x)
{
    int p=0;
    while ((A[H(x,pr[p])] || B[H(x,pr[p])]) && A[H(x,pr[p])]!=x) p++;
    return A[H(x,pr[p])] == x;
}

int main()
{
    eratostene(100);
    int c,x;
    f >> N;
    for (;N--;){
        f >> c >> x;
        if (c==1) insereaza(x); else
        if (c==2) sterge(x); else
        if (c==3) g << cauta(x) << '\n';
    }

    return 0;
}