Cod sursa(job #28714)

Utilizator AdixSuciu Adrian Adix Data 8 martie 2007 10:54:59
Problema Triplete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>
#include <math.h>
const int B=32;
long m,n;
long solutie;
long muc[65537][3];
unsigned long long mat[4100][300];

void citire(){
		 FILE *in;
		 long i,x,y,j,y1,x1;
		 in=fopen("triplete.in","r");
		 fscanf(in,"%ld %ld",&n,&m);
		 j=0;

		 for(i=0;i<m;i++){
			 fscanf(in,"%ld %ld",&x,&y);
			 x--;
			 y--;
			 muc[i][0]=x;muc[i][1]=y;
			 j=y/B;
			 y1=y%B;
			 mat[x][j]+= 1<<y1;
			 j=x/B;
			 x1=x%B;
			 mat[y][j]+= 1<<x1;

			 }
		 fclose(in);
		 }


long formula(long k,long l,int mm){

long x,i,j;
x=mat[k][mm]&mat[l][mm];
i=B+1;j=0;
while(x!=0){

if((x-(1<<i))>=0){ j++;x=x-(1<<i);}
i--;
}
return j;

}

void procesare(){
long i,k,l,j;
for(i=0;i<m;i++){
		k=muc[i][0];
		l=muc[i][1];
		for(j=0;j<=(n/B);j++)
				solutie+=formula(k,l,j);


	 }
}
void scriere(){
		 FILE *out;
		 out=fopen("triplete.out","w");
		 fprintf(out,"%ld",solutie/3);
		 fclose(out);
		 }

int main(){
		 citire();
		 procesare();
		 scriere();
		 return 0;
		 }