Cod sursa(job #219531)

Utilizator AthanaricCirith Gorgor Athanaric Data 7 noiembrie 2008 11:31:16
Problema Triplete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <stdio.h>
#define N 4100
#define M 66000
int n,m,a[N][N];
int minim (int a, int b)
{
	if (a>b)
		return b;
	return a;
}
void citirith()
{
	int x,y,s;
	scanf("%d%d",&n,&m);
	for (int i=1; i<=m; i++)
	{
		scanf("%d%d",&x,&y);
		s=x+y;
		x=minim(x,y); y=s-x;
		a[x][y>>5]|=1<<(y&31);
	}
}
void rezolvarith()
{
	unsigned int sol,solmax=0,z,cat;
	for (int i=1; i<n; i++)
		for (int j=i+1; j<=n; j++)
		{
			sol=0;
			for (int k=0; k<=n/32; k++)
			{
				z=a[i][k]&a[j][k];
				cat=0;
				while (z)
				{
					cat+=(z%2);
					z/=2;
				}
				sol+=cat;
			}
			solmax+=sol;
		}
	printf("%d ",solmax);
}
int main()
{
	freopen("triplete.in","r",stdin);
	freopen("triplete.out","w",stdout);
	citirith();
	rezolvarith();
}