Pagini recente » Cod sursa (job #985514) | Cod sursa (job #2843571) | Cod sursa (job #594996) | Cod sursa (job #694791) | Cod sursa (job #1837396)
#include <cstdio>
typedef unsigned short USA;
const int MAX = 1 << 16;
const int MAX_N = 1024;
const int PAIRS = MAX_N * MAX_N;
int last[MAX], next[1+PAIRS], lana[1+PAIRS], o1[1+PAIRS], o2[1+PAIRS];
inline USA hashuie(int x) {
return (USA)x;
}
void add(int sum, int a, int b, int id) {
USA h;
h = hashuie(sum);
next[id] = last[h];
last[h] = id;
lana[id] = sum;
o1[id] = a;
o2[id] = b;
}
int check(int sum, int a, int b) {
USA h;
h = hashuie(sum);
int i = last[h], rez = 0;
while(i != 0) {
if(lana[i] == sum && o2[i] < a)
rez++;
i = next[i];
}
return rez;
}
int v[MAX_N];
int main() {
int n, l, topkek;
long long rez;
FILE *fin = fopen("oite.in", "r");
fscanf(fin, "%d%d", &n, &l);
for(int i = 0; i < n; ++i)
fscanf(fin, "%d", &v[i]);
fclose(fin);
rez = 0LL;
topkek = 1;
for(int i = 1; i < n; ++i)
for(int j = 0; j < i; ++j) {
rez = rez + check(l - v[i] - v[j], j, i);
add(v[i] + v[j], j, i, topkek);
topkek++;
}
FILE *fout = fopen("oite.out", "w");
fprintf(fout, "%lld", rez);
fclose(fout);
return 0;
}