Cod sursa(job #25154)

Utilizator bogdan2412Bogdan-Cristian Tataroiu bogdan2412 Data 4 martie 2007 11:06:18
Problema Puteri Scor 40
Compilator cpp Status done
Runda preONI 2007, Runda 3, Clasa a 9-a si gimnaziu Marime 1.09 kb
#include <stdio.h>

#define FOR(i,a,b) for (int (i) = (a); i < (int)(b); i++)

int nr[65][65][65];
int gcd[130][130];

inline int getgcd( int a, int b )
{
	if (b == 0) return a;
	if (a == 0) return b;

	int c;
	for (; a % b; )
	{
		c = a % b;
		a = b;
		b = c;
	}
	return b;
}

int main()
{
	freopen("puteri.in", "rt", stdin);
	freopen("puteri.out", "wt", stdout);
	int N;
	scanf("%d", &N);

	FOR(i,0,N)
	{
		int a, b, c;
		scanf("%d %d %d", &a, &b, &c);

		nr[a][b][c]++;
	}

	FOR(a,0,130) FOR(b,0,130)
		gcd[a][b] = getgcd(a, b);
	
	long long NR = 0;
	FOR(a,0,65) FOR(b,0,65) FOR(c,0,65)
	{
		if (!nr[a][b][c])
			continue;
		NR += (long long)nr[a][b][c] * (nr[a][b][c] - 1) >> 1;
		FOR(a2,a,65) FOR(b2,(a2 == a ? b : 0),65)
		{
			if (gcd[a + a2][b + b2] == 1)
				continue;

			FOR(c2,(a2 == a && b2 == b) ? c + 1 : 0,65)
			{
				if (gcd[ gcd[a + a2][b + b2] ][c + c2] == 1)
					continue;
				if (!nr[a2][b2][c2])
					continue;

//				printf("%d %d %d %d\n", a+a2,b+b2,c+c2, nr[a][b][c] * nr[a2][b2][c2]);
				NR += (long long)nr[a][b][c] * nr[a2][b2][c2];
			}
		}
	}

	printf("%lld\n", NR);

	return 0;
}