uva 10487 Closest Sums(二分搜索)
2013-08-23 23:49
453 查看
题目连接:10487 - Closest Sums
题目大意:给出n 个数值, 在对应给出m个查找数值,要求每个查找数值在最先给出的n个数值中找到两个数值,是的这两个数值的和是所有任意两两数值的和中最接进查找数值的。
解题思路:将n个数任意两两数值的和计算出来后储存在数组当中,然后从小到大排列,最后用二分的方法查找,注意有两个的话输出最小的。
题目大意:给出n 个数值, 在对应给出m个查找数值,要求每个查找数值在最先给出的n个数值中找到两个数值,是的这两个数值的和是所有任意两两数值的和中最接进查找数值的。
解题思路:将n个数任意两两数值的和计算出来后储存在数组当中,然后从小到大排列,最后用二分的方法查找,注意有两个的话输出最小的。
#include <stdio.h> #include <set> #include <vector> #include <algorithm> using namespace std; const int N = 1005; int num ; vector<int> sum; int main() { int n, m, v, cas = 1; vector<int>::iterator it; while (scanf("%d", &n) == 1 && n) { sum.clear(); for (int i = 0; i < n; i++) { scanf("%d", &num[i]); for (int j = 0; j < i; j++) sum.push_back(num[i] + num[j]); } sort(sum.begin(), sum.end()); scanf("%d", &m); printf("Case %d:\n", cas++); for (int i = 0; i < m; i++) { scanf("%d", &v); it = lower_bound(sum.begin(),sum.end(), v); int Min = *it; if (it != sum.begin() && abs(*(it - 1) - v) < abs(Min - v)) Min = *(it - 1); printf("Closest sum to %d is %d.\n", v, Min); } } return 0; }
相关文章推荐
- UVA - 10487 Closest Sums(二分查找)
- uva - 10487 - Closest Sums(二分查找)
- uva:10487 - Closest Sums(二分查找)
- UVA 10487 Closest Sums (二分查找)
- 二分查找 UVa 10487 - Closest Sums,时间复杂度为O(2nlogn)
- UVA - 10487 - Closest Sums (二分求解)
- UVA 10487 Closest Sums(二分)
- uva:10487 - Closest Sums(二分查找)
- UVA 10487 Closest Sums(水)
- UVA 10487-Closest Sums(遍历水题)
- uva 10487 - Closest Sums
- UVA - 10487 Closest Sums 暴力
- uva 10487 Closest Sums (遍历&二分查找&&双向查找)
- uva10487 - Closest Sums
- [二分搜索]Closest Sums uva10487
- UVa 10487 Closest Sums (遍历&二分查找)
- uvalive 3971 - Assemble(二分搜索 + 贪心)
- uva 10341 Solve It(二分搜索)
- [LeetCode] Closest Binary Search Tree Value 最近的二分搜索树的值
- UVALive 6168 Fat Ninjas --二分小数+搜索