#include<stdio.h>
int main(){
int n, m, t;
bool flag = false;
scanf("%d%d", &n, &m);
int hashtable[5100] = {0};
for(int i = 0; i < n; i++){
scanf("%d", &t);
hashtable[t]++;
}
for(int i = 1; i < 5100; i++){
if(hashtable[i] != 0 && i < m){
hashtable[i]--;
if(hashtable[m - i] != 0){
printf("%d %d", i, m - i);
flag = true;
break;
}
}
}
if(flag == false) printf("No Solution\n");
return 0;
}
第一次,40min,独立完成
#include<stdio.h>
#include<algorithm>
using namespace std;
int a[100010];
int f(int left,int right,int k){
int mid;
while(left<=right){
mid=(left+right)/2;
if(a[mid]==k)return 1;
else if(a[mid]>k) right=mid-1;
else left=mid+1;
}
return 0;
}
int main(){
int i,n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
sort(a,a+n);
for(i=0;i<n;i++){
int k=m-a[i];
if(f(i+1,n-1,k)){
printf("%d %d\n",a[i],k);
break;
}
}
if(i==n)printf("No Solution\n");
return 0;
}
第二次,参考算法笔记完成40min,二分法
#include<stdio.h>
#include<algorithm>
using namespace std;
int main(){
int n, m;
bool flag = false;
scanf("%d%d", &n, &m);
int a[n];
for(int i = 0; i < n; i++){
scanf("%d", &a[i]);
}
sort(a, a + n);
int l = 0, r = n -1;
while(l < r){
if(a[l] + a[r] < m) l++;
else if(a[l] + a[r] > m) r--;
else if(a[l] + a[r] == m){
printf("%d %d", a[l], a[r]);
flag = true;
break;
}
}
if(flag == false) printf("No Solution\n");
return 0;
}
第三次,参考算法笔记完成,tow points,