满分题解
方法一
#include<iostream>
#include<stdio.h>
#include<string>
#include<vector>
#include<cctype>
#include<algorithm>
using namespace std;
const int maxn = 100005;
int a[maxn];
int n, m;
int main() {
//freopen("input.txt", "r", stdin);
cin >> n >> m;
for (int i = 0; i < n; i++) {
scanf("%d", & a[i]);
}
sort(a, a + n);
int i;
for (i = 0; i < n; i++) {
int index = lower_bound(a + i+1, a + n, m - a[i])-a;
if (index<=n-1 && a[i] + a[index] == m) {
cout << a[i] << " " << a[index];
break;
}
}
if (i == n)
cout << "No Solution";
return 0;
}
方法二
#include<stdio.h>
#include <stdlib.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<vector>
using namespace std;
int n, m;
int coin[100010];
int binarySearch(int x) {
int l = x+1, r = n;
while (l <= r) {
int mid = (l + r) / 2;
if (coin[x] + coin[mid] == m)
return mid;
if (coin[x] + coin[mid] > m)
r = mid - 1;
else
l = mid + 1;
}
return -1;
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++) {
scanf("%d", &coin[i]);
}
sort(coin, coin + n);
int res = 0,index=-1;
for (int i = 0; i < n - 1; i++) {
int x = binarySearch(i);
if (x != -1) {
res = x;
index = i;
break;
}
}
if (index == -1) {
printf("No Solution");
}
else {
printf("%d %d", coin[index], coin[res]);
}
return 0;
}