您的位置:首页 > 其它

ACM: uva 10125 - Sumsets

2016-05-19 23:28 363 查看
Sumsets
 
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
 
题意: 在N个数的整数集合里面找出四个数, 满足a+b+c = d, 输出d, 否则输出 "no
solution"
 
解题思路:

    1. 枚举即可.
 
 
代码:
#include
<cstdio>

#include <iostream>

#include <cstring>

#include <algorithm>

using namespace std;

#define MAX 1005

int n;

int a[MAX];

int main()

{

// freopen("input.txt", "r", stdin);

 int i, j, l, r, temp;

 while(scanf("%d", &n) !=
EOF)

 {

  if(n == 0) break;

  for(i = 0; i <
n; ++i)

   scanf("%d",
&a[i]);

  sort(a,
a+n);

  bool flag = false;

  int ans;

  for(i = n-1; i
>= 0; --i)

  {

   for(j = n-1;
j >= 0; --j)

   {

    if(i
!= j)

    {

     temp
= a[i]-a[j];

     for(l
= 0, r = j-1; l < r; )

     {

      if(a[l]+a[r]
== temp)

      {

       ans
= a[i];

       flag
= true;

       break;

      }

      if(a[l]+a[r]
> temp) r--;

      else
l++;

     }

     if(flag)
break;

    }

   }

   if(flag)
break;

  }

  if(flag)
printf("%d\n", ans);

  else printf("no
solution\n");

 }

 return 0;

}

 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: