Cod sursa(job #58104)

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

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

#define MAX_N 1024
#define MAX_L 1000007

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) {
		cnt1[A[i]] ++;
		for (int j = i + 1; j < C; ++ j)
			cnt2[A[i] + A[j]] ++;
	}
	long long 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 += (long long)(cnt2[sum] - cnt1[sum - A[i]] - cnt1[sum - A[j]]);
				if (sum - A[i] == A[j])
					ans ++;
				if (sum - A[j] == A[i])
					ans ++;
			}
		}
	}

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

	return 0;
}