Cod sursa(job #539165)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 22 februarie 2011 16:00:08
Problema Triplete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<stdio.h>

FILE*f=fopen("triplete.in","r");
FILE*g=fopen("triplete.out","w");

int n,m,a,b,Byt[4100][140],i,aux,nr[65700],A[67000],B[67000],j,r;

int main () {
	fscanf(f,"%d %d",&n,&m);
	for ( i = 1 ; i <= m ; ++i ){
		fscanf(f,"%d %d",&a,&b);
		A[i] = a ; B[i] = b;
		Byt[a][b / 30] |= (1 << ( b % 30 )) ;
		Byt[b][a / 30] |= (1 << ( a % 30 )) ;
	}
	for ( i = 1 ; i <= 65535 ; ++i ){
		aux = i;
		while ( aux ){
			if ( aux & 1 ){
				++nr[i];
			}
			aux = aux >> 1;
		}
	}
	
	for ( i  = 1 ; i <= m ; ++i ){
		for ( j = 0 ; j <= n / 30 ; ++j ){
			aux = Byt[A[i]][j] & Byt[B[i]][j];
			r += nr[aux >> 16 ] + nr[aux & 65535];
		}
	}
	r /= 3;
	fprintf(g,"%d\n",r);
	
	fclose(f);
	fclose(g);
	
	return 0;
}