首页 > 其他 > 详细

uva-10487-枚举

时间:2018-11-13 01:30:10      阅读:123      评论:0      收藏:0      [点我收藏+]

题意:给你一个集合,每俩个数相加得到一个和s,输入s1,问离s1最近的s是多少

二分,注意如果二分出相等,那一定是最近的数,要不然就比较最后mid和mid-1的数

 
#include <string>
#include<iostream>
#include<map>
#include<memory.h>
#include<vector>
#include<algorithm>
#include<queue>
#include<vector>


namespace cc
{
	using std::cout;
	using std::endl;
	using std::cin;
	using std::map;
	using std::vector;
	using std::string;
	using std::sort;
	using std::priority_queue;
	using std::greater;
	using std::vector;
	using std::swap;

	constexpr int N = 1001;
	//constexpr int N = 30;

	//priority_queue<int,vector<int>, greater<int> >q;

	int a[N];
	int b[N*N];

	void solve()
	{

		int n;
		int t = 0;
		while (cin >> n && n)
		{
			t++;
			for (int i = 0;i < n;++i)
				cin >> a[i];
			int k = 0;
			for (int i = 0;i < n - 1;i++)
			{
				for (int j = i + 1;j < n;j++)
				{
					b[k++] = a[i] + a[j];
				}
			}
			sort(b, b + k);
			int c, q;
			cin >> c;
			cout << "Case " << t << ":" << endl;
			while (c)
			{
				cin >> q;
				int qq = INT32_MAX;
				int l = 0, r = k-1;
				int mid=0;
				int ok = 0;
				while (l <= r)
				{
					mid = (l + r) / 2;
					if (b[mid] < q)
						l = mid + 1;
					else if (b[mid] > q)
						r = r - 1;
					else
					{
						ok = 1;
						break;
					}
				}
				if(ok)
				cout << "Closest sum to " << q << " is " << q<<"." << endl;
				else
				{
					if(mid==0)
						cout << "Closest sum to " << q << " is " << b[mid] << "." << endl;
					else if(abs(b[mid-1]-q) < abs(b[mid]-q))
						cout << "Closest sum to " << q << " is " << b[mid-1] << "." << endl;
					else
						cout << "Closest sum to " << q << " is " << b[mid] << "." << endl;
				}
				--c;
			}
		}

	}

};


int main()
{

#ifndef ONLINE_JUDGE
	freopen("d://1.text", "r", stdin);
#endif // !ONLINE_JUDGE
	cc::solve();

	return 0;
}

  

uva-10487-枚举

原文:https://www.cnblogs.com/shuiyonglewodezzzzz/p/9949697.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!