描述:哈希处理就可以了 #include <cstring> #include <cstdlib> #include <cstdio> #define N 1000010 #define M 1010 int cmp(const void *p1,const void *p2) { return *(int *)p1 - *(int *)p2; } int num[M],head[N],next[N]; long long sum[N][3]; int n,flag,count; void insert() { int c=sum[count][0]%N; if(c<0) c=c+N; next[count]=head[c]; head[c]=count; } void dfs(long long x,int i,int j) { int c=x%N; if(c<0) c+=N; c=head[c]; while(c!=-1) { if(x==sum[c][0]&&sum[c][1]!=i&&sum[c][2]!=i&&sum[c][1]!=j&&sum[c][2]!=j) { flag=1; printf("%d\n",num[i]); return; } c=next[c]; } } int main() { #ifndef ONLINE_JUDGE freopen("a.txt", "r", stdin); #endif while(scanf("%d",&n)!=EOF) { if(!n) break; flag=count=0; memset(head,-1,sizeof(head)); memset(next,-1,sizeof(next)); for(int j=0; j<n; j++) scanf("%d",&num[j]); qsort(num,n,sizeof(int),cmp); for(int i=0; i<n; i++) for(int j=i+1; j<n; j++) if(i!=j) { sum[count][0]=num[i]+num[j]; sum[count][1]=i; sum[count][2]=j; insert(); count++; } for(int i=n-1; i>=0; i--) { for(int j=0; j<n; j++) if(i!=j) { dfs(num[i]-num[j],i,j); if(flag) break; } if(flag) break; } if(!flag) puts("no solution"); } return 0; }