poj Sumsets 2549 (二分+转换)

原创 2015年11月17日 21:22:56
Sumsets
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 9369   Accepted: 2564

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
//题意:
问所给的数中,是否存在四个数a,b,c,d,使得a+b+c=d;
若存在则输出d,否则输出弄solution;
转换 a+b==d-c;
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define INF -0x3f3f3f3f
using namespace std;
int a[1010];
int main()
{
	int n;
	int i,j;
	while(scanf("%d",&n),n)
	{
		for(i=0;i<n;i++)
			scanf("%d",&a[i]);
		sort(a,a+n);
		int ans=INF;
		for(i=n-1;i>=0;i--)
		{
			for(j=n-1;j>=0;j--)
			{
				if(i==j)
					continue;
				int sum=a[i]-a[j];
				int l=0,r=j-1;
				while(l<r)
				{
					if(a[l]+a[r]==sum)
					{
						ans=a[i];
						break;
					}
					if(a[l]+a[r]>sum)
						r--;
					else
						l++;
				}
				if(ans!=INF)
					break;
			}
			if(ans!=INF)
				break;
		}
		if(ans==INF)
			printf("no solution\n");
		else
			printf("%d\n",ans);
	}
	return 0;
}

POJ 2104 K-th Number【整体二分 + 树状数组】

本来只是想学一下CDQ,还是先把整体二分搞懂一点。这题窝几个月前分别用划分树,树套树,主席树和挑战上介绍的分桶法实现了一发(然而现在都忘得差不多了) 最快的是划分树,其次是主席树,然后是树套树,...
  • Yukizzz
  • Yukizzz
  • 2016年04月29日 01:09
  • 1387

20131030: 森林结构的运用(poj: 树的转换,电话号码,物质分解记录);带权并查集(食物链);C++输入;map的基本使用

本来是应该昨晚写这篇总结的,但无奈昨晚断网了,坑爹的校园网!!!~ 昨天成功刷掉了树与森林的4道题,加上前天做掉的并查集入门题, 树与森林宣告终结!不过这一章的确学到很多东西,尤其是编程技巧和一些细节...
  • u010644404
  • u010644404
  • 2013年10月30日 14:28
  • 2058

POJ题目分类(各种分类合集)

POJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094) 初期...
  • kingwolfofsky
  • kingwolfofsky
  • 2013年04月23日 15:47
  • 7236

poj--2549--Sumsets(二分查找)

Sumsets Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u ...
  • qq_29963431
  • qq_29963431
  • 2015年11月18日 20:11
  • 157

POJ2549-Sumsets【折半搜索】

原题链接 Sumsets Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10698 Accepte...
  • qq_31805821
  • qq_31805821
  • 2016年11月01日 16:12
  • 119

UVA 10125 - Sumsets(POJ 2549) hash

给定一个整数几何S,找出一个最大的d,使得a+b+c=d,其中a,b,c,d是S中不同的元素。 S的个数最大为1000。...
  • murmured
  • murmured
  • 2014年02月11日 21:14
  • 1278

POJ2549 Sumsets 折半枚举

题目大意是,一个集合中有N个元素,找出最大的S,满足条件A+B+C=S,并且这四个数都属于该集合,N不超过1000.         如果直接枚举O(n^4)显然复杂度太高,将等式转化一下A+B=S...
  • u011363774
  • u011363774
  • 2014年07月23日 15:48
  • 670

poj 2549 Sumsets(折半枚举)

因为要找a+b+c=d,所以可以写成,a+b=d-c,枚举d,c,ran hou
  • u013665921
  • u013665921
  • 2014年11月12日 14:41
  • 432

poj2549 Sumsets双向搜索

题意:给你一个含有n(n不同的数a,b,c,d,使a+b+c=d;若存在则输出最大的d 思路:完全暴力的话O(n^4),会T,可以考虑双向搜索,公式变形为a+b=d-c;分别枚举a+b和c-d,将值...
  • dlutjwh
  • dlutjwh
  • 2017年01月03日 00:18
  • 181

poj2549 Sumsets

Sumsets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10533   Accepted: 2863 ...
  • qq_33362864
  • qq_33362864
  • 2016年08月08日 18:10
  • 192
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj Sumsets 2549 (二分+转换)
举报原因:
原因补充:

(最多只允许输入30个字)