问题
https://vjudge.net/problem/UVA-10125
分析
使用long long,中途相遇法,要注意,不能使用相同的数字,所以要记录
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <map>
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long LL;
const int maxn=1000+5;
int n;
LL a[maxn];
map<int,vector<pair<int,int>>> m;
int main(void){
while(scanf("%d",&n)==1 && n){
m.clear();
for(int i=0;i<n;++i){
scanf("%lld",&a[i]);
}
sort(a,a+n);
LL ans=0;
int flag=0;
for(int i=0;i<n;++i){
for(int j=i+1;j<n;++j){
m[a[i]+a[j]].push_back(make_pair(a[i],a[j]));
}
}
for(int i=n-1;i>=0;--i){
for(int j=n-1;j>=0;--j){
if(i==j) continue;
auto iter=m.find(a[i]-a[j]);
if(iter==m.end()) continue;
auto &vi=iter->second;
for(int k=0;k<vi.size();++k){
int t1=vi[k].first,t2=vi[k].second;
if((a[i]!=t1 && a[j]!=t2) && (a[i]!=t2 && a[j]!=t1)){
ans=a[i];
flag=1;
break;
}
}
if(flag) break;
}
if(flag) break;
}
if(flag) printf("%lld\n",ans);
else printf("%s\n","no solution");
}
return 0;
}