Cod sursa(job #218316)

Utilizator toni2007Pripoae Teodor Anton toni2007 Data 1 noiembrie 2008 15:28:58
Problema Triplete Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <stdio.h>
#include <stdlib.h>
#define FIN "triplete.in"
#define FOUT "triplete.out"
#define N 4096
int n,m;
unsigned char cine[N][N/8];
typedef struct bla bla;
struct bla{
	int a,b;
};
bla l[N];
const unsigned char puteri[]={1,128,64,32,16,8,4,2};  
inline int numar(short x){
    char nr=0;
    while (x){
        x&=x-1;
        ++nr;
    }
    return nr;
}
int max(int a,int b){
	if (a>b)
		return a;
	return b;
}
int min(int a,int b){
	if (b>a)
		return a;
	return b;
}
void scan(void){
	int a,b,i;
	freopen(FIN,"r",stdin);
	freopen(FOUT,"w",stdout);
	scanf("%d%d",&n,&m);
	for (i=1;i<=m;++i){
		scanf("%d%d",&l[i].a,&l[i].b);
		a=min(l[i].a,l[i].b);b=max(l[i].a,l[i].b);
		l[i].a=a;l[i].b=b;
		cine[a][(b>>3)+1]|=1<<(b&7); 
		//cine[b][(a>>3)+1]|=puteri[a&7];
	}
}
long long sol;
void solve(void){
	int i,x,j;
	//printf("%d %d %d\n",cine[1][1],cine[2][1],cine[3][1]);
	for (i=1;i<=m;++i){
		for (j=1;j<=(n>>3)+1;++j){
			x=cine[l[i].a][j] & cine[l[i].b][j];//printf("%d ",x);
			sol+=(long long)numar(x);
		}
	}
}
void print(void){
	printf("%lld\n",sol);///(long long)3);
	fclose(stdin);
	fclose(stdout);
	exit(0);
}
int main(void){
	scan();
	solve();
	print();
}