diff options
Diffstat (limited to 'NTU/keba2.c')
-rw-r--r-- | NTU/keba2.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/NTU/keba2.c b/NTU/keba2.c new file mode 100644 index 0000000..d9316fd --- /dev/null +++ b/NTU/keba2.c @@ -0,0 +1,49 @@ +#include <stdlib.h> +#include <stdio.h> + +int cmp(const void *x, const void *y) +{ + return *(long long *) x - *(long long *) y; +} + +int main() +{ + short n, i; + long b; + scanf("%hd %ld", &n, &b); + long long *s = malloc(n * 8); + for (i = 0; i < n; i++) + scanf("%lld", &s[i]); + + qsort(s, n, 8, cmp); + + short m = 0, hist[10000] = {1}; + long long a[10000]; + a[0] = s[0]; + for (i = 1; i < n; i++) { + if (s[i] != a[m]) { + m++; + a[m] = s[i]; + } + hist[m]++; + } + m++; + + long val = 0; + long long foo; + void *p; + for (i = 0; i < m; i++) { + foo = b - a[i]; + if (foo == a[i]) + val += hist[i] * (hist[i] - 1) / 2; + if (foo <= a[i]) + break; + p = bsearch(&foo, a, m, 8, cmp); + if (p != NULL) + val += hist[i] * hist[(long long *) p - a]; + } + + printf("%ld\n", val); + + return 0; +} |