Cod sursa(job #7157)

Utilizator mithyPopovici Adrian mithy Data 21 ianuarie 2007 12:53:37
Problema Triplete Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasa a 10-a Marime 1.46 kb
#include <fstream.h>

void read();
void make();
void write();
int add();

int a[100][100];// 4096
int bin[4096];
long n,m,rel;

int main()
{
   read();
   make();
   write();
   return 0;
}


void read()
{
   ifstream fin("triplete.in");
   fin >> n >> m;
   int i,aux1,aux2;

   for (i=0; i<m; i++)
   {
      fin >> aux1 >> aux2;
      a[aux1][aux2] = 1;
      a[aux2][aux1] = 1;
   }
}

int add()
{
  int i;
  for (i=n-1;bin[i];i--) bin[i] = 0;
  bin[i] = 1;

  int max=0,ok=0;
  for (i=0; i<n; i++)
  {
     if (bin[i]) max++;
  }
  if (max==n) return 2; // daca am terminat de umplut
  if (max==3) return 1; // daca e bun de prelucrat
  return 0;             // daca are mai putin de 3 elem
}

void make()
{
   int i,j,k,aux,ok=1,ok2;

   while (ok)
   {
      aux = add();

      switch (aux)
      {
         case 0: continue;
         case 1:
              for (i=0,ok2=1; i<n-2 && ok2; i++)
              {
                 for (j=i+1; j<n-1 && ok2; j++)
                 {
                   for (k=j+1; k<n && ok2; k++)
                   {
                     if (a[i][j]&&a[i][k]&&a[j][k])
                     {
                       rel++;
                       ok2 = 0;
                     }
                   }
                 }
              }
              break;
         case 2: ok=0; break;
      }
   }
}

void write()
{
   ofstream fout("triplete.out");
   fout << rel << '\n';
}