PAT A1048 Find Coins (25 points) - implémentation de la recherche binaire

Eva adore collectionner des pièces de partout dans l'univers, y compris d'autres planètes comme Mars. Un jour, elle a visité un centre commercial universel qui pouvait accepter toutes sortes de pièces comme moyen de paiement. Cependant, il y avait une exigence particulière de paiement : pour chaque facture, elle ne pouvait utiliser que deux pièces exactement pour payer le montant exact. Puisqu'elle a jusqu'à 10 5 pièces avec elle, elle a certainement besoin de votre aide. Vous êtes censé lui dire, pour une somme d'argent donnée, si elle peut ou non trouver deux pièces pour payer.

Spécification d'entrée :

Chaque fichier d'entrée contient un cas de test. Pour chaque cas, la première ligne contient 2 nombres positifs : N (≤10 5 , le nombre total de pièces) et M (≤10 ​3 , la somme d'argent qu'Eva doit payer). La deuxième ligne contient N valeurs faciales des pièces, qui sont toutes des nombres positifs ne dépassant pas 500. Tous les nombres d'une ligne sont séparés par un espace.

Spécification de sortie :

Pour chaque cas de test, écrivez sur une ligne les deux valeurs faciales V 1​​ et V ​2 (séparées par un espace) telles que V 1 +V ​2 ​​=M et V ​1 ≤V ​2 . Si une telle solution n'est pas unique, sortir celle avec le plus petit V 1 ​​. S'il n'y a pas de solution, affichez Pas de solution à la place.

Exemple d'entrée 1 :

8 15
1 2 8 7 2 4 11 15

Exemple de sortie 1 :

4 11

Exemple d'entrée 2 :

7 14
1 8 7 2 4 11 15

Exemple de sortie 2 :

Pas de solution

Signification du titre :

Saisissez le nombre de pièces N et le prix de la marchandise M sur la première ligne, et saisissez la dénomination de chaque pièce sur la deuxième ligne ; sortez les dénominations V 1 et V 2 de deux pièces dont la somme des dénominations est M, et exigez V 1 <= V 2 , si la sortie est le résultat Non unique, sortir le groupe avec la plus petite valeur V 1 , s'il n'y a pas de résultat qui réponde à la condition, sortir Pas de solution.

Idées :

(1) Concevoir une fonction de recherche binaire dont les paramètres sont le tableau a[], la borne inférieure gauche, la borne supérieure droite et l'entier x à rechercher, trouver s'il existe un élément a[i] égal à x dans le tableau a, et sortie s'il existe un tel élément i, sinon sortie -1 ;
(2) Le tableau a doit être trié de manière non décroissante avant d'utiliser la fonction de recherche binaire.

code:

#include <cstdio>
#include <algorithm>
using namespace std;

int binarySearch(int a[],int left,int right,int x){
    
    //二分查找,找出数组a中是否存在等于x的元素a[i],如果存在这个元素则输出i,否则输出-1 
	int mid;
	while(left<=right){
    
    
		mid = (left+right)/2;
		if(a[mid]==x) return mid;
		else if(a[mid]>x) right = mid-1;
		else left = mid+1;
	}
	return -1;
} 

int main(){
    
    
	int N,M;
	scanf("%d %d",&N,&M);
	int V[N];
	for(int i=0;i<N;i++){
    
    
		scanf("%d",&V[i]);
	}
	sort(V,V+N);//非递减排序
	for(int i=0;i<N;i++){
    
    
		int j = binarySearch(V,i+1,N-1,M-V[i]);//因为数组V非递减,且题目要求V[i]<=V[j],所以将下界设为i+1
		if(j!=-1){
    
    
			printf("%d %d\n",V[i],V[j]);
			return 0;
		}
	}
	printf("No Solution\n");
	return 0;
}

Je suppose que tu aimes

Origine blog.csdn.net/PanYiAn9/article/details/104650617
conseillé
Classement