Cod sursa(job #1048153)

Utilizator AndreiOprisanFMI - Oprisan Andrei Daniel AndreiOprisan Data 5 decembrie 2013 13:48:20
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 3.32 kb
#include<iostream>
#include<stdio.h>
using namespace std;
struct nod{long info;
nod *leg;}*prim0,*ultim0,*prim1,*ultim1,*prim2,*ultim2,*prim3,*ultim3,*prim4,*ultim4,*p,*q,*r;
void adaug(struct nod *&prim,struct nod *&ultim,long x)
{
    if(prim==NULL)
    {
        p=new nod;
        p->info=x;
        prim=ultim=p;
        ultim->leg=NULL;
    }
    else
    {
        p=new nod;
        p->info=x;
        ultim->leg=p;
        ultim=p;
        ultim->leg=NULL;
    }
}
void sterg(struct nod *&prim,struct nod *&ultim,long x)
{
    if(prim->info==x)
    {
        p=prim;
        prim=prim->leg;
        p->leg=NULL;
        delete p;
    }
    else
        if(ultim->info==x)
    {
        p=prim;
        while(p->leg!=ultim)
            p=p->leg;
        q=ultim;
        ultim=p;
        ultim->leg=NULL;
        delete q;
    }
    else
    {
        p=prim;
        q=p->leg;
        while(q->info!=x)
        {
            q=q->leg;
            p=p->leg;
        }
        r=q->leg;
        p->leg=r;
        delete q;
    }
}
int caut(struct nod *&prim,long x)
{
    if(prim==NULL)
        return 0;
    else
    {
        p=prim;
        while(p!=NULL)
           if(p->info==x)
              return 1;
           else
              p=p->leg;
        return 0;
    }
}
int main()
{
    long x,op,n,i;
    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%d",&op,&x);
        if(op==1)
        {
            if(x%5==0&&caut(prim0,x)==0)
               adaug(prim0,ultim0,x);
            else
                if(x%5==1&&caut(prim1,x)==0)
                   adaug(prim1,ultim1,x);
                 else
                    if(x%5==2&&caut(prim2,x)==0)
                       adaug(prim2,ultim2,x);
                     else
                        if(x%5==3&&caut(prim3,x)==0)
                           adaug(prim3,ultim3,x);
                        else
                            if(caut(prim4,x)==0)
                              adaug(prim4,ultim4,x);
        }
        else
            if(op==2)
        {
             if(x%5==0&&caut(prim0,x)==1)
               sterg(prim0,ultim0,x);
            else
                if(x%5==1&&caut(prim1,x)==1)
                   sterg(prim1,ultim1,x);
                 else
                    if(x%5==2&&caut(prim2,x)==1)
                       sterg(prim2,ultim2,x);
                     else
                        if(x%5==3&&caut(prim3,x)==1)
                           sterg(prim3,ultim3,x);
                        else
                            if(caut(prim4,x)==1)
                              sterg(prim4,ultim4,x);
        }
        else
        {
           if(x%5==0)
               fprintf(g,"%d\n",caut(prim0,x));
            else
                if(x%5==1)
                   fprintf(g,"%d\n",caut(prim1,x));
                 else
                    if(x%5==2)
                       fprintf(g,"%d\n",caut(prim2,x));
                     else
                        if(x%5==3)
                           fprintf(g,"%d\n",caut(prim3,x));
                        else
                           fprintf(g,"%d\n",caut(prim4,x));
        }
    }
    fclose(f);
    fclose(g);
    return 0;
}