Sumsets
Time Limit: 1000MS |
|
Memory Limit: 65536K |
Total Submissions: 6261 |
|
Accepted: 1745 |
Description

Given S, a set of integers, find the largest d such that a + b + c = d where a, b, c, and d are distinct elements of S.
Input
Several S, each consisting of a line containing an integer 1 <= n <= 1000 indicating the number of elements in S, followed by the elements of S, one per line. Each element of S is a distinct integer between -536870912 and +536870911 inclusive. The last line of input contains 0.
Output
For each S, a single line containing d, or a single line containing "no solution".
Sample Input
5
2
3
5
7
12
5
2
16
64
256
1024
0
Sample Output
12
no solution
Source
Waterloo local 2001.06.02
#include<stdio.h> #include<algorithm> using namespace std; int main(int argc, char* argv[]) { bool flag; long n,i,j,l,r,t,a[1000]; while(scanf("%d",&n),n) { for(i=0;i<n;i++) scanf("%d",a+i); sort(a,a+n); flag=false; for(i=n-1;i>=0;i--) { for(j=n-1;j>1;j--) if(i!=j) { t=a[i]-a[j]; for(l=0,r=j-1;l<r;) { if(a[l]+a[r]==t) { flag=true; break; } if(a[l]+a[r]>t) r--; else l++; } if(flag) break; } if(flag) break; } if(flag) printf("%d/n",a[i]); else printf("no solution/n"); } return 0; }