Pagini recente » Cod sursa (job #2134283) | Cod sursa (job #31260) | Cod sursa (job #2081590) | Cod sursa (job #2570699) | Cod sursa (job #1824533)
#include <cstdio>
#include <algorithm>
const int MAX_N = 1024;
int v[MAX_N];
struct Oitze {
int o1, o2, sum;
} oi[MAX_N * MAX_N];
bool cmp(Oitze a, Oitze b) {
return a.sum < b.sum || (a.sum == b.sum && a.o2 < b.o2);
}
int bin(int n, int s, int o) {
int st, dr, mid;
st = 0;
dr = n;
while(dr - st > 1) {
mid = (st + dr) / 2;
if(oi[mid].sum < s || (oi[mid].sum == s && oi[mid].o2 <= o))
st = mid;
else
dr = mid;
}
return st;
}
int main() {
int c, l, top;
long long rez;
FILE *fin = fopen("oite.in", "r");
fscanf(fin, "%d%d", &c, &l);
for(int i = 0; i < c; ++i)
fscanf(fin, "%d", &v[i]);
fclose(fin);
top = 0;
for(int i = 1; i < c; ++i)
for(int j = 0; j < i; ++j) {
oi[top].o1 = j;
oi[top].o2 = i;
oi[top].sum = v[i] + v[j];
++top;
}
std::sort(oi, oi + top, cmp);
rez = 0LL;
for(int i = 0; i < top; ++i) {
rez = rez + bin(top, l - oi[i].sum, oi[i].o1 - 1) -
bin(top, l - oi[i].sum, -1);
}
FILE *fout = fopen("oite.out", "w");
fprintf(fout, "%lld", rez);
fclose(fout);
return 0;
}