Cod sursa(job #7137)

Utilizator robbyRobertino robert robby Data 21 ianuarie 2007 12:46:08
Problema Triplete Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasa a 10-a Marime 1 kb
#include <stdio.h>
#include <stdlib.h>
#define nmax 65537
FILE *f,*g;


int a[nmax][2];
char **rel;

int main()
{
   long n,m,i,j,nr,k,ok;
   FILE *f=fopen("triplete.in","rt");
   FILE *g=fopen("triplete.out","wt");
   fscanf(f,"%ld %ld",&n,&m);

   rel=(char**)calloc(n+1,sizeof(int));

   for (i=1;i<=n;i++)
	 rel[i]=(char*)calloc(n-i+2,sizeof(char));


   for (i=1;i<=m;i++)
	 {
	   fscanf(f,"%d %d",&a[i][0],&a[i][1]);
	   if (a[i][0]>a[i][1])
		 {
		   j=a[i][0];
		   a[i][0]=a[i][1];
		   a[i][1]=j;
		 }
	   rel[a[i][0]][n-a[i][1]+1]='1';
	 }
   nr=0;
   for (i=1;i<=n;i++)
	 for (j=n-i+1;j>0;j--)

	   if (rel[i][j]=='1')
		 {
		   for (k=j-1;k>0;k--)
			{
			 ok=0;
			 if (n-k+1<=n&&i<=k)
			   {
				if (rel[n-j+1][k]=='1'&&rel[n-k+1][i]=='1')
				 ok=1;
			   }
			 if (k<=n-i+1)
			   {
				if (rel[n-j+1][k]=='1'&&rel[i][k]=='1')
				  ok=1;
			   }
			 if (ok)
			   nr++;
			}
		 }
   fprintf(g,"%ld\n",nr);
   fclose(f);
   fclose(g);
   return 0;
}