Sumsets
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 11084 Accepted: 3032
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
把两个的和 用数组保存起来,然后 用差二分查找,有可能会有一样的~~然后这样枚举居然没超时~QAQ
AC代码:
#include<cstdio>
#include<algorithm>
using namespace std;
const int K = 1e4 + 10;
int a[K];
int main()
{
int N;
while(scanf("%d",&N) != EOF && N){
for(int i = 1; i <= N; i++)
scanf("%d",&a[i]);
sort(a + 1, a + 1 + N);
int ok = 1,ans = 0;
for(int i = N; i >= 1 && ok; i--)
for(int j = N; j >= 1 && ok; j--){
if(i == j) continue;
ans = a[i] - a[j];
for(int l = 1,r = j - 1; ok && l < r;){
if(a[l] + a[r] == ans) ans = a[i],ok = 0;
else if(a[l] + a[r] > ans) r--;
else l++;
}
}
if(ok) printf("no solution\n");
else printf("%d\n",ans);
}
return 0;
}