PAT A1048 Buscar monedas (25 puntos) (búsqueda de dos puntos)

Inserte la descripción de la imagen aquí

#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;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_45964844/article/details/111561051
Recomendado
Clasificación