本题可采用哈希表统计,先将数组排序,保证读的时候是按v1从小到大读的,每读一个v1,就在表中查是否有对应的v2存在,若存在则直接返回,注意,若v1==v2,则需要看表中是否有两个或两个以上的v1,故要统计数目,应用unordered_map
#include<iostream>
#include<unordered_map>
#include<algorithm>
using namespace std;
const int N=100010;
int a[N];
int main(){
int n,m;
cin>>n>>m;
unordered_map<int,int> cnt;
for(int i=0;i<n;i++){
cin>>a[i];
cnt[a[i]]++;
}
sort(a,a+n);
bool flag=0;
for(int i=0;i<n;i++){
if(cnt.count(m-a[i])!=0){
if(a[i]==m-a[i]&&cnt[a[i]]>=2){
cout<<a[i]<<' '<<m-a[i]<<endl;
flag=1;
break;
}
else if(a[i]!=m-a[i]){
cout<<a[i]<<' '<<m-a[i]<<endl;
flag=1;
break;
}
}
}
if(!flag)cout<<"No Solution"<<endl;
return 0;
}