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