#include <cstdio>
#include <algorithm>
using namespace std;
int n, m, need;
int arr[100010];
int solve(int arr[], int left, int right, int x){
int mid;
while(left <= right){
mid = (left+right) / 2;
if(arr[mid] == x){
return mid;
}
if(arr[mid] < x){
left = mid + 1;
}else{
right = mid - 1;
}
}
return -1;
}
int main(){
scanf("%d %d", &n, &m);
for(int i=0; i<n; i++){
scanf("%d", &arr[i]);
}
sort(arr, arr+n);
int flag = 0;
for(int i=0; i<n; i++){
need = m - arr[i];
int loc = solve(arr, i+1, n-1, need);
if(loc != -1){
printf("%d %d", arr[i], arr[loc]);
flag = 1;
break;
}
}
if(!flag){
printf("No Solution");
}
return 0;
}
PAT A1048 Buscar monedas (25 puntos) (búsqueda de dos puntos)
Supongo que te gusta
Origin blog.csdn.net/weixin_45964844/article/details/111561051
Recomendado
Clasificación