Cod sursa(job #1075938)

Utilizator gigel123Ionut. gigel123 Data 9 ianuarie 2014 19:06:27
Problema Hashuri Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.94 kb
#include <stdio.h>
#include <stdlib.h>

#define m 666013

typedef struct nod nod;

struct nod{
    int info;
    nod *urm;
};

int x,n,i,t,ok;
nod *has[m],*q,*aux1,*aux2;

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

    fscanf(f,"%d",&n);
    for(i=1;i<=n;i++){
        fscanf(f,"%d",&t);
        fscanf(f,"%d",&x);
        ok=0;
        switch(t){
            case 1:{
                for(aux1=has[x%m];aux1;aux1=aux1->urm){
                    if(aux1->info==x)ok=1;
                }
                if(ok==0){
                    q=(nod*)malloc(sizeof(nod));
                    q->info=x;
                    q->urm=has[x%m];
                    has[x%m]=q;
                }
            }break;
            case 2:{
                aux1=has[x%m];
                aux2=aux1;
                if(aux1){
                    if(aux1->info==x){
                        aux2=has[x%m];
                        has[x%m]=has[x%m]->urm;
                        free(aux2);
                    }
                    else{
                        while(aux2->urm && aux2->urm->info!=x)
                            aux2=aux2->urm;
                        if (aux2->urm){
                            if(aux2->urm->info==x){
                                q=aux2->urm;
                                aux2->urm=aux2->urm->urm;
                                free(q);
                            }
                        }
                    }
                }
            }break;
            case 3:{
                for(aux1=has[x%m];aux1;aux1=aux1->urm){
                    if(aux1->info==x)ok=1;
                }
                    if(ok)
                        fprintf(g,"%d\n",1);
                    else fprintf(g,"%d\n",0);
            }break;
            default: printf("Eroare");break;
        }
    }
    fclose(f);
    fclose(g);
    return 0;
}