【POJ 2549 Sumsets】+ 技巧枚举

来源:互联网 发布:傻瓜式淘宝客app 编辑:程序博客网 时间:2024/05/17 07:48

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;}
0 0
原创粉丝点击