寻找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;
}
不积小流无以成江河