Cod sursa(job #24936)

Utilizator grecoTiberiu-Lucian Florea greco Data 4 martie 2007 00:59:27
Problema Puteri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
using namespace std;

#include <cstdio>
#include <cstring>

#define FIN "puteri.in"
#define FOUT "puteri.out"

#define MAX_N 100010

int T[128][128][128];
int N, A[MAX_N], B[MAX_N], C[MAX_N], ans;

int cnt1, cnt2, cnt3, v[3][256], w[256][256];

int main()
{
	int i, t;

	freopen("puteri.in", "r", stdin);
	freopen("puteri.out", "w", stdout);

	scanf("%d", &N);
	cnt1 = cnt2 = cnt3 = 0;
	memset(v, 0, sizeof(v));
	memset(w, 0, sizeof(w));
	for (ans = i = 0; i < N; ++i) {
		scanf("%d %d %d", A+i, B+i, C+i);

		if (!A[i]) ans += v[1][B[i]-C[i]+64];
		if (!B[i]) ans += v[2][A[i]-C[i]+64];
		if (!C[i]) ans += v[3][A[i]-B[i]+64];

		ans += w[A[i]-B[i]+64][A[i]-C[i]+64];

		if (!B[i] && !C[i]) ++cnt1;
		if (!A[i] && !C[i]) ++cnt2;
		if (!A[i] && !B[i]) ++cnt3;

		if (!A[i]) ++v[1][C[i]-B[i]+64];
		if (!B[i]) ++v[2][C[i]-A[i]+64];
		if (!C[i]) ++v[3][B[i]-A[i]+64];

		++w[B[i]-A[i]+64][C[i]-A[i]+64];;
	}
	ans += cnt1*(cnt1-1)/2+cnt2*(cnt2-1)/2+cnt3*(cnt3-1)/2;
	
	printf("%d\n", ans);
	return 0;
}