Cod sursa(job #1517703)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 4 noiembrie 2015 18:32:42
Problema Hashuri Scor 40
Compilator c Status done
Runda Arhiva educationala Marime 1.33 kb
#include <stdio.h>
#define lim 1000001
#define MOD 666019
int val[lim],nxt[lim],lista[MOD],k=0;
int cauta(int x){
    int pp,poz;
    pp=0;
    poz=lista[x%MOD];
    while(poz!=-1&&pp==0){
        if(val[poz]==x)
            pp=poz;
        poz=nxt[poz];
    }
    return pp;
}
void adauga(int x){
    if(cauta(x)==0){
        k++;
        val[k]=x;
        nxt[k]=lista[x%MOD];
        lista[x%MOD]=k;
    }
}
void sterge(int x){
    int ante,poz,pp;
    /*poz=cauta(x);
    val[poz]=-1;*/
    ante=0;
    poz=lista[x%MOD];
    while(nxt[poz]!=-1&&pp==0){
        if(val[poz]==x)
            pp=poz;
        ante=poz;
        poz=nxt[poz];
    }
    if(ante!=0){
        nxt[ante]=nxt[poz];
    }
    else
        lista[x%MOD]=-1;
    val[poz]=-1;
    nxt[poz]=-1;
}
int main(){
    FILE *fin,*fout;
    fin=fopen("hashuri.in","r");
    fout=fopen("hashuri.out","w");
    int i,n,x,cer;
    fscanf(fin,"%d",&n);
    for(i=0;i<MOD;i++)
        nxt[i]=-1;
    for(i=1;i<=n;i++){
        fscanf(fin,"%d%d",&cer,&x);
        if(cer==1)
            adauga(x);
        if(cer==2)
            sterge(x);
        if(cer==3)
            if(cauta(x)!=0)
                fprintf(fout,"1\n");
            else
                fprintf(fout,"0\n");
    }
    fclose(fin);
    fclose(fout);
    return 0;
}