poj 2785 4 Values whose Sum is 0
2012-03-28 02:13
260 查看
二分枚举;
也可以将两个和数组都排序,这样可以在查找时保持沿一个方向,最坏情况下复杂度为O(n),不如二分查找;
计算cpd[]时,c[i] + d[j]错写成c[i]+d[i]查了半天才发现。。。
也可以将两个和数组都排序,这样可以在查找时保持沿一个方向,最坏情况下复杂度为O(n),不如二分查找;
计算cpd[]时,c[i] + d[j]错写成c[i]+d[i]查了半天才发现。。。
# include <stdio.h> # include <stdlib.h> # define MAXN 4001 int apb[MAXN*MAXN], cpd[MAXN*MAXN]; int a[MAXN], b[MAXN], c[MAXN], d[MAXN]; int cmp(const void *a, const void *b) { return (*(int *)a - *(int *)b); } int bin_search(int *a, int key, int n); int main() { int n, i, j, ans, t; while (~scanf("%d", &n)) { for (i = 0; i < n; ++i) scanf("%d%d%d%d", &a[i], &b[i], &c[i], &d[i]); for (i = 0; i < n; ++i) for (j = 0; j < n; ++j) { apb[i*n + j] = a[i] + b[j]; cpd[i*n + j] = c[i] + d[j]; } qsort(apb, n*n, sizeof(int), cmp); t = n*n; for (ans = i = 0; i < t; ++i) ans += bin_search(apb, -cpd[i], t); printf("%d\n", ans); } return 0; } int bin_search(int *a, int key, int n) { int cnt, up, low, mid, t; cnt = 0; up = n-1; low = 0; while (low <= up) { mid = (up + low) >> 1; if (key == a[mid]) break; if (key < a[mid]) up = mid - 1; else low = mid + 1; } if (key == a[mid]) { ++cnt; t = mid; while (t > 0 && key == a[--t]) ++cnt; while (mid < n-1 && key == a[++mid]) ++cnt; } return cnt; }
相关文章推荐
- poj 2785 4 Values whose Sum is 0
- poj 2785 4 Values whose Sum is 0 哈希
- POJ-2785 Values whose Sum is 0 Hash表
- POJ 2785 4 Values whose Sum is 0 [二分]
- poj 2785 4 Values whose Sum is 0
- 4 Values whose Sum is 0 POJ - 2785
- POJ 2785 4 Values whose Sum is 0
- poj 2785 4 Values whose Sum is 0(双向搜索)
- POJ 2785 4 Values whose Sum is 0(折半枚举)
- POJ-2785 4 Values whose Sum is 0 Hash | sort+二分
- POJ 2785 4 Values whose Sum is 0二分入门
- poj 2785 4 Values whose Sum is 0 (二分+sort)
- POJ 2785:4 Values whose Sum is 0 二分
- poj 2785 4 Values whose Sum is 0
- POJ 2785 4 Values whose Sum is 0(折半枚举)
- POJ 2785 4 VALUES WHOSE SUM IS 0 【折半枚举】
- [折半枚举] poj 2785 4 Values whose Sum is 0
- poj 2785 4 Values whose Sum is 0
- POJ 2785 4 Values whose Sum is 0 二分
- poj 2785 4 values whose sum is 0