题目:https://www.patest.cn/contests/pat-a-practise/1048
//1048. Find Coins (25)
//二分的方法不对
#include<cstdio>
#include<algorithm>
using namespace std;
int N=0,M=0,num[100010]={0};
//寻找第一个num[y]+x大于M的数的下标
int find(int low, int high, int key)
{
int mid;
while(low<=high)
{
mid = (low+high)/2;
if(num[mid] == key)
{
return mid;
}
else if(num[mid]>key)
high = mid - 1;
else
low = mid + 1;
}
return -1;
}
int main()
{
int temp;
scanf("%d%d",&N,&M);
for(int i=0; i<N; i++)
scanf("%d",&num[i]);
sort(num, num+N);
for(int i=0; i<N; i++)
{
temp = find(i+1,N-1,M-num[i]);
if(temp!=-1)
{
printf("%d %d",num[i],num[temp]);
return 0;
}
}
printf("No Solution");
return 0;
}