题目地址:点这里
对输入的数据排序以后 ,用set查找对应的数据是不是也在集合中,nlogn 级别的算法
主要是判断是不是相等的,当且仅当是相等的才需要出现两次以上。
代码:
#include<iostream>
#include<set>
#include<algorithm>
#include<cstdio>
#include<map>
#include<cstring>
using namespace std;
int p[1000005];
set<int> s;
map<int,int> mp;
int main()
{
int x;
int n;
while(cin>>x>>n)
{
s.clear();
mp.clear();
for(int i=0;i<n;i++)
{
scanf("%d",&p[i]);
s.insert(p[i]);
mp[p[i]]++;
}
sort(p,p+n);
bool ok=0;
for(int i=0;i<n;i++)
{
if(s.find(10000000*x-p[i])!=s.end())
{
if((p[i]==10000000*x-p[i]&&mp[p[i]]>1)||p[i]!=10000000*x-p[i])
{
cout<<"yes "<<p[i]<<' '<<10000000*x-p[i]<<endl;
ok=1;
break;
}
}
}
if(!ok) cout<<"danger"<<endl;
}
}