Cod sursa(job #151836)

Utilizator a7893Nae Mihai a7893 Data 8 martie 2008 18:04:55
Problema Triplete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
#define N 4097
int n,m,sol;
int a[N][N/8+1];
struct vec{
	int x,y;
}v[65537];
int  p2[8]={1,2,4,8,16,32,64,128};
void read()
{
	int i;
	scanf("%d%d",&n,&m);
	for(i=1;i<=m;i++)
	{
		scanf("%d%d",&v[i].x,&v[i].y);
		a[v[i].x][v[i].y>>3]|=p2[(v[i].y-1)&7];
		a[v[i].y][v[i].x>>3]|=p2[(v[i].x-1)&7];
	}
}
void afis()
{
	int i,j;
	for(i=1;i<=n;i++)
	{
		for(j=0;j<=n/8;j++)
			for(int k=0;k<8;k++)
				if(a[i][j]&p2[k])
					printf("1 ");
				else
					printf("0 ");
		printf("\n");
	}
}
void solve()
{
	int i,j,x,y,z,nr=0;
	for(i=1;i<=m;i++)
	{
		x=v[i].x;
		y=v[i].y;
		for(j=0;j<=n/8;j++)
		{
			z=a[x][j]&a[y][j];
			while(z)
			{
				nr++;
				z&=(z-1);
			}
		}
	}
	printf("%d\n",nr/3);
}
int main()
{
	freopen("triplete.in","r",stdin);
	freopen("triplete.out","w",stdout);
	read();
	solve();
	//afis();
	return 0;
}