51Nod 1001

二分查找,有序数组,相加等于K,必然头尾相加。小于K,说明头过小。大于K,说明尾过大。

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<stdio.h>
 4 #include<string.h>
 5 using namespace std;
 6 int main(){
 7     int m,n,a[50007],flag=0;
 8     scanf("%d%d",&m,&n);
 9     for(int i=0;i<n;i++){
10         scanf("%d",&a[i]);
11     }
12     sort(a,a+n);
13     int i=0,j=n-1;
14     while(i<j){
15         if(a[i]+a[j]==m){
16             printf("%d %d\n",a[i++],a[j--]);
17             flag=1;
18         }
19         else if(a[i]+a[j]<m){
20             i++;
21         }
22         else if(a[i]+a[j]>m){
23             j--;
24         }
25     }
26     if(flag==0)
27         printf("No Solution\n");
28 }

 

posted @ 2019-02-12 14:09  precious_LZY  阅读(102)  评论(0)    收藏  举报