Pagini recente » Cod sursa (job #2254839) | Cod sursa (job #2854541) | Cod sursa (job #754826) | Cod sursa (job #3127622) | Cod sursa (job #935438)
Cod sursa(job #935438)
#include <stdio.h>
#define NMAX 801
#define LMAX 30001
int N, bat[NMAX], lbat[LMAX], s, last;
int ntri;
void search(int p, int q) {
if (p <= q ) {
int m = (p+q)/2;
if (bat[m] <= s) {
if (last < m)
last = m; //printf("%d %d\n", m, last);
search(m+1, q);
}
else
search(p, m-1);
}
}
int main() {
FILE *fi = freopen("nrtri.in", "r", stdin);
FILE *fo = freopen("nrtri.out", "w", stdout);
int i, j, a;
scanf("%d", &N);
for (i = 0; i < N; ++i) {
scanf("%d", &a);
++lbat[a];
}
for (i = 1, N = 0; i < LMAX; ++i) {
for (j = 0; j < lbat[i]; ++j)
bat[N++] = i;
}
for (i = 0; i < N-2; ++i)
for (j = i+1; j < N-1; ++j) {
s = bat[i] + bat[j];
last = -1;
search(j+1, N-1);
if (last != -1)
ntri += last - j;
}
//s = 1, last = -1;
//search(1, 800);
//printf("%d", last);
printf("%d\n", ntri);
return 0;
}