Cod sursa(job #7053)

Utilizator alecmanAchim Ioan Alexandru alecman Data 21 ianuarie 2007 12:12:10
Problema Triplete Scor 90
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasa a 10-a Marime 1.37 kb
/*
 *
 *
  Info-Arena, preONI 2007 - Runda I - Triplete
 *
 *
 */

#include<stdio.h>

#define INPUT "triplete.in"
#define OUTPUT "triplete.out"

FILE *fin=fopen(INPUT, "r"),*fout=fopen(OUTPUT, "w");

typedef struct elem
{
  int val;
  struct elem *urm;
};
typedef elem *reper;

int n,a,b,vec[65538][2];
long m;

reper adiacenta[4100];

void citire();
void rezolvare();

int main()
{
  citire();
  rezolvare();
  fclose(fin);
  fclose(fout);
  return 0;
}

void citire()
{
  reper adr;
  fscanf(fin, "%d %ld", &n, &m);
  for(long i=1;i<=m;++i)
  {
    fscanf(fin, "%d %d", &a, &b);
    if(a>b)
    {
      a=a+b;
      b=a-b;
      a=a-b;
    }
    vec[i][1]=a;
    vec[i][2]=b;
    adr=new elem;
    adr->urm=adiacenta[a];
    adr->val=b;
    adiacenta[a]=adr;
  }
}

void rezolvare()
{
  long long k=0;
  int l=0;
  reper adr,adr2;
  for(long i=1;i<=m;++i)
  {
    adr=adiacenta[vec[i][1]];
    while(adr!=NULL)
    {
      if(adr->val>vec[i][2])
      {
         adr2=adiacenta[vec[i][2]];
         l=0;
         while(adr2!=NULL&&!l)
         {
           if(adr->val==adr2->val)
           {
             l=1;
             ++k;
           }
           adr2=adr2->urm;
         }
      }
      adr=adr->urm;
    }
  }
  fprintf(fout, "%lld\n", k);
/*  delete adr;
  delete adr2;
  delete [] adiacenta;*/
}