寻找pair

给定n个整数使其两两组合成一对pair,例如给定 1 ,2 可以组成的pair为(1,1),(1,2),(2,1),(2,2),然后在这些pair中寻找第k小的pair。

输入第一行包含两个数字,第一个是整数个数n,第二个是第k小

输入第二行即为n个整数

输入示例

3  4

3  5  9

输出示例

(5,3)

 

这个题很简单,只需将输入的n个数字进行从小到大排序,然后我们知道,每个数字都可以组成n个pair,现在我们把每组pair都想想成一行,如下所示

pair1,  pair2,  pair3,  ......,   pairn

pair(n+1),pair(n+2),    ..............,pair(2n)

.................................................................................

.................................................................................

pair(n*n-n+1),..........................................,pair(n*n)

这里就有n行,总共n*n个pair,每行的pair的第一个元素都相同,第二个元素则是从小到大排列,pair的第一个数字即对应第几行的pair,所以只需对k整除n就可以得到,pair的第二个数字则只需对k取余。

代码如下

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void func(int n, int k)
{
	vector<int> sr;
	int tmp;
	for(int i=0; i<n; ++i)
	{
		cin>>tmp;
		sr.push_back(tmp);
	}
	::sort(sr.begin(), sr.end());
	int x = (k-1)/n, y = (k-1)%n;
	cout<<"("<<sr[x]<<","<<sr[y]<<")"<<endl;
}
int main()
{
	int n, k;
	cin>>n>>k;
	func(n, k);
	return 0;	
}

 

 

 

posted @ 2020-09-30 10:42  C_hp  阅读(163)  评论(0编辑  收藏  举报