Cod sursa(job #153202)

Utilizator andrei.12Andrei Parvu andrei.12 Data 10 martie 2008 11:39:03
Problema Triplete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<stdio.h>

int n, m, pt[16], x1, x2, x, y, nr, i, j, k, use[4095];
char v[4095][513], z;
inline int max(int a, int b){
	if (a > b)
		return a;
	return b;
}
int main()
{
	freopen("triplete.in", "rt", stdin);
	freopen("triplete.out", "wt", stdout);
	
	pt[0] = 1;
	for (i = 1; i <= 15; i ++)
		pt[i] = 2*pt[i-1];
	
	scanf("%d%d", &n, &m);
	for (i = 1; i <= m; i ++){
		scanf("%d%d", &x, &y);
		
		x1 = (y-1) / 8;
		x2 = (y-1) % 8;
		
		v[x][x1] |= pt[x2];
		use[x] = max(use[x], x1);
	}
	
	for (i = 1; i < n; i ++)
		for (j = i+1; j <= n; j ++){
			int tr = max(use[i], use[j]);
			
			for (k = 0; k <= tr; k ++){
				z = v[i][k] & v[j][k];
				
				while (z){
					z &= z-1;
					
					nr ++;
				}
			}
		}
	
	printf("%d\n", nr);
	
	return 0;
}