Cod sursa(job #58106)

Utilizator MariusMarius Stroe Marius Data 4 mai 2007 00:31:10
Problema Oite Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <stdio.h>

const char iname[] = "oite.in";
const char oname[] = "oite.out";

#define MAX_N 1024
#define MAX_L 1000007

typedef long long i64;

int C;

int L;

int A[MAX_N];

int cnt2[MAX_L], cnt1[MAX_L];


void read_in(void)
{
	scanf("%d", &C);
	scanf("%d", &L);
	for (int i = 0; i < C; ++ i)
		scanf("%d", &A[i]);
}

int main(void)
{
	freopen(iname, "r", stdin);
	read_in();

	for (int i = 0; i < C; ++ i) {
		if (A[i] <= L)
			cnt1[A[i]] ++;
		for (int j = i + 1; j < C; ++ j)
			if (A[i] + A[j] <= L)
				cnt2[A[i] + A[j]] ++;
	}
	i64 ans = 0;
	for (int i = 0; i < C - 1; ++ i) {
		for (int j = i + 1; j < C; ++ j) {
			int sum = L - A[i] - A[j];
			if (sum >= 0) {
				ans += (i64)(cnt2[sum]);
				if (sum >= A[i]) {
					ans -= (i64)(cnt1[sum - A[i]]);
					if (sum - A[i] == A[j])
						ans ++;
				}
				if (sum >= A[j]) {
					ans -= (i64)(cnt1[sum - A[j]]);
					if (sum - A[j] == A[i])
						ans ++;
				}
			}
		}
	}

	freopen(oname, "w", stdout);
	printf("%lld\n", ans / 6);

	return 0;
}