题目链接:
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1001
题解:
水体,先排序,然后直接用类似二分的思想去做。(常规的暴力搜索毫无疑问是会超时的)
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 50000+10;
#define met(a,b) memset(a,b,sizeof(a))
int num[maxn];
int main()
{
int k,n;
while(cin>>k>>n)
{
for(int i=0;i<n;i++)
cin>>num[i];
sort(num,num+n);
int flag=1;
int i=0,j=n-1;
while(i<j)
{
if(num[i]+num[j]>k)
j--;
else if(num[i]+num[j]<k)
i++;
else if(num[i]+num[j]==k)
{
flag=0;
printf("%d %d\n",num[i],num[j]);
i++;
j--;
}
}
if(flag)
printf("No Solution\n");
}
}
本文提供了一种高效的算法解决方案来解决51NOD平台上的1001号问题。通过先对输入数据进行排序,然后采用类似二分查找的方法寻找符合条件的数对。该方法避免了暴力搜索导致的时间复杂度过高问题。
1270

被折叠的 条评论
为什么被折叠?



