现在的位置: 首页 > 综合 > 正文

Sumsets Uva10125 poj

2013年09月04日 ⁄ 综合 ⁄ 共 1117字 ⁄ 字号 评论关闭

//3sum问题

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <queue>
#include <algorithm>
#include <vector>
#include <cstring>
#include <stack>
#include <cctype>
#include <utility>   
#include <map>
#include <string>  
#include <climits> 
#include <set>
#include <string> 
#include <sstream>
#include <utility>
#include <ctime>

using std::priority_queue;
using std::vector;
using std::swap;
using std::stack;
using std::sort;
using std::max;
using std::min;
using std::pair;
using std::map;
using std::string;
using std::cin;
using std::cout;
using std::set;
using std::queue;
using std::string;
using std::istringstream;
using std::make_pair;
using std::greater;

const int MAXN(1010);

int arr[MAXN];

int main()
{
	int n;
	while(scanf("%d", &n), n)
	{
		for(int i = 1; i <= n; ++i)
			scanf("%d", arr+i);
		sort(arr+1, arr+1+n);
		int count = 0;
		for(int i = 1; i <= n; ++i)
			if(i == 1 || arr[i] != arr[i-1])
				arr[++count] = arr[i];
		int ans;
		try
		{
			int tn = n-2;
			for(int i = n; i >= 1; --i)
			{
				ans = arr[i];
				for(int j = 1; j <= tn; ++j)
					if(j != i)
					{
						int l = j+1, r = n;
						while(l < r)
						{
							if(l == i)
							{
								++l;
								continue;
							}
							if(r == i)
							{
								--r;
								continue;
							}
							int temp = arr[j]+arr[l]+arr[r];
							if(temp == ans)
								throw true;
							if(temp > ans)
								--r;
							else
								++l;
						}
					}
			}
			printf("no solution\n");
		}
		catch(bool)
		{
			printf("%d\n", ans);
		}
	}
	return 0;
}

抱歉!评论已关闭.