水题,不过我超时。二分查找。强的一匹。
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1001
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int Find(int num[],int n,int k)
{
int low,high,mid;
low=0;high=n-1;
while(low<=high)
{
mid=(low+high)/2;
if(num[mid]==k)
return 1;
else if(num[mid]<k)
low=mid+1;
else if(num[mid]>k)
high=mid-1;
}
return 0;
}
int main()
{
int i,k,n,a[50010],flage;
freopen("in.txt","r",stdin);
scanf("%d%d",&k,&n);
flage=0;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
for(i=0;i<n;i++)
{
if(Find(a,n,k-a[i])&&a[i]<k-a[i])
{
printf("%d %d\n",a[i],k-a[i]);
flage=1;
}
}
if(!flage)
{
printf("No Solution\n");
}
return 0;
}