about summary refs log tree commit diff
path: root/NTU/keba2.c
diff options
context:
space:
mode:
Diffstat (limited to 'NTU/keba2.c')
-rw-r--r--NTU/keba2.c49
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;
+}