Pagini recente » Cod sursa (job #1347658) | Cod sursa (job #1418133) | Rating Marin Marin (zobica) | Cod sursa (job #2276521) | Cod sursa (job #58114)
Cod sursa(job #58114)
#include <stdio.h>
#include <map>
using namespace std;
const char iname[] = "oite.in";
const char oname[] = "oite.out";
#define MAX_N 1024
typedef long long i64;
int C;
int L;
int A[MAX_N];
map <int, int> cnt1, cnt2;
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();
i64 ans = 0;
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]] ++;
}
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] + A[j])
ans --;
if (sum >= A[i]) {
ans -= (i64)cnt1[sum - A[i]];
if (sum - A[i] == A[j])
ans ++;
if (sum - A[i] == A[i])
ans ++;
}
if (sum >= A[j]) {
ans -= (i64)cnt1[sum - A[j]];
if (sum - A[j] == A[i])
ans ++;
if (sum - A[j] == A[j])
ans ++;
}
}
}
}
freopen(oname, "w", stdout);
printf("%lld\n", ans / 6);
return 0;
}