本来是这样的:
然后将cmp函数里a<=b改成a<b,就全部pass了。
#include<iostream>
#include <string>
#include <algorithm>
using namespace std;
bool cmp(int a,int b){
return a<b;
}
int main(){
int n,m;
cin>>n>>m;
int a[1010]={0};
int b[100010]={0};
for(int i=0;i<n;i++){
int p;
cin>>p;
b[i]=p;
a[p]++;
}
sort(b,b+n,cmp);
int t=0,q=0;
for(int i=0;i<n;i++){
if(b[i]>m) break;
a[b[i]]--;
if(a[m-b[i]]>0){
t=b[i];
q=m-b[i];
break;
}
}
if(t>q){
int temp=q;
q=t;
t=temp;
}
if(t==0||q==0){
cout<<"No Solution";
}
else{
cout<<t<<" "<<q;
}
}
加个等于的情况是担心两个数一样不知道怎么排序,看来无需有这个顾虑,有空的时候学习一下sort()
的源码。