#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int A[50000];
int main(){
int N,i,j;
int flag=0;
long long K;
cin>>K;cin>>N;
for(i=0;i<N;i++){
scanf("%d",&A[i]);
}
sort(A,A+N);
for(i=0,j=N-1;i<j;i++){
if((A[i]+A[j])>K){
j--;
i--;
}else{
if((A[i]+A[j])==K){
flag=1;
cout<<A[i]<<" "<<A[j]<<endl;
}
}
}
if(flag==0){
cout<<"No Solution";
}
return 0;
}
错误总结:
最开始写了个暴力超时,需要改为O(n)才行 (最开始的sort为n*logn)
sort(A,A+N);传入参数为地址,起始位A,排序N个,结尾本应为A+N-1,但这里的参数应传入A+N 多一个
j=N-1写成了j==N-1。。。