UVA 10125 - Sumsets(POJ 2549) hash

手把手教你在全新服务器内网安装OpenEuler 22.03 LTS SP4+ 安装 openGuass 5.0.0(LTS) 数据库 openEuler是面向数字基础设施的操作系统,支持服务器、云计算、边缘计算、嵌入式等应用场景,支持多样性计算,致力于提供安全、稳定、易用的开源服务器Linux操作系统。 阅读详情

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1066

http://poj.org/problem?id=2549

题目大意:

给定一个整数几何S,找出一个最大的d,使得a+b+c=d,其中a,b,c,d是S中不同的元素。

S的个数最大为1000。

思路:

直接暴力枚举a,b,c,d必挂。

上面的式子移向得:a+b=d-c。我们先预处理所有的和,并且插入Hash表。

然后枚举d和c,看是否在Hash表中是否存在。

若存在且不同,则更新d。

类似的题目还有:

HDU 1496 Equations hash HDU上排名第一!

POJ 2785 4 Values whose Sum is 0 Hash!

HDU 1407 测试你是否和LTC水平一样高 枚举、二分、hash

PS:

一开始这里的

if(data[i].sum!=sum || data[i].a==a ||data[i].a==b ||data[i].b==a ||data[i].b==b )

data[i].b==b 然后WA到哭了。。呜呜呜呜,后来发现想撞死。。来去吃点好吃的安慰一下我受伤的心灵。哈哈


0.072S,让暴力枚举的见鬼去吧~

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=1024;
const int mod=1<<18;
int x[MAXN],head[mod],len;
struct data
{
	int a,b,sum;
	int next;
}data[MAXN*MAXN];

inline int gethash(int x)
{
	if(x<0) x=-x;   //变为正的
	return (x) & (mod-1);
}
void insert(int a,int b,int sum)
{
	int cur=gethash(sum);
	for(int i=head[cur];i!=-1;i=data[i].next)
	{
		if(data[i].sum==sum && data[i].a==a && data[i].b==b)
			return;
	}
	data[len].a=a;
	data[len].b=b;
	data[len].sum=sum;
	data[len].next=head[cur];
	head[cur]=len++;
}
bool search(int a,int b,int sum)
{
	int cur=gethash(sum);
	for(int i=head[cur];i!=-1;i=data[i].next)
	{
		if(data[i].sum!=sum ||	data[i].a==a ||	data[i].a==b ||	data[i].b==a ||	data[i].b==b )
			continue;
		return true;
	}
	return false;
}
int main()
{
	int n;
	while(~scanf("%d",&n),n)
	{
		len=0;
		memset(head,-1,sizeof(head));

		for(int i=0;i<n;i++)
			scanf("%d",&x[i]);

		for(int i=0;i<n;i++)
			for(int j=i+1;j<n;j++)	
				insert(i,j,x[i]+x[j]);
				//	insert(x[i],x[j],x[i]+x[j]);这样是错的,应该用下标来判断是否同一个。
				//因为元素可能相同。

		bool ok=false;
		int ans=-999999999;
		for(int i=0;i<n;i++)
		{		
			for(int j=0;j<n;j++)
			{
				if(i==j) continue;
				if(search(i,j,x[i]-x[j]))
				{
					ok=true;
					ans=max(ans,x[i]);
					break;
				}
			}
		}
		if(ok) printf("%d\n",ans);
		else puts("no solution");
	}
	return 0;
}



微信小程序启用蓝牙设备特征值变化时的notify功能 注意:这里的serviceUUID、notifyCharacteristicUUID 我会在后面写入数据时做重点说明。isNotifyBLECharacteristic:false, //是否启用蓝牙设备服务特征 notify。二、启用蓝牙设备特征值变化时的notify功能。下一篇 将继续介绍 微信小程序蓝牙设备写入数据。 阅读详情

相关推荐

深入解析mSATA与mini-PCIE接口的硬件设计要点

本文深入解析mSATA与mini-PCIE接口的硬件设计要点,涵盖信号定义、电源设计、高速信号处理及PCB布局布线等关键内容。通过实战案例和调试技巧,帮助工程师规避常见设计陷阱,提升电路设计效率,特别适合工业控制和嵌入式系统开发场景。

weixin_28741413的博客 315

uva-10125-暴力枚举

uva-10125-暴力枚举 题意:给一个集合,求d=a+b+c,d最大且a,b,c,d下标不能是同一个 解题思路 a+b=d-c 另外,可以OJ看下0ms大佬们的代码. #include "pch.h" #include <string> #include<iostream> #include&...

weixin_34177064的博客 185

ZYNQ开发(2)在Linux系统层上PL-PS通过AXI-DMA传输数据详细步骤及注意事项

参考的网络资料 https://github.com/bperez77/xilinx_axidma/tree/master https://gitlab.gnome.org/HosseinBeheshti/UlteraZed7EV/-/tree/master/petalinux/xilinx_axidma https://www.icode9.com/content-3-925319.html https://blog.youkuaiyun.com/weixin_38218267/article/details/1

aizaiyueye的专栏 3448

AOAPC I: Beginning Algorithm Contests 题解

AOAPC I: Beginning Algorithm Contests 题解 AOAPC I: Beginning Algorithm Contests (Rujia Liu) - Virtual Judge Volume 0. Getting Started UVA10055 Hashmat the Brave Warrior【水题】 - 海岛Blog - 优快云博客 UVA...

海岛Blog 1327

Fluent实战——残差震荡分析与收敛优化策略

本文深入探讨了Fluent仿真中残差震荡的成因与优化策略。残差震荡是流场物理或数值问题的关键信号,文章系统分析了网格质量、边界条件、物理模型非定常性及求解设置四大主因,并提供了库朗数与松弛因子的调参心法,以及针对超音速流、共轭传热等典型场景的实战优化方案,旨在帮助用户有效提升计算收敛性与结果可靠性。

w1x2y3的博客 313

第3讲:单端传输线的时域TDR仿真(基于实战的第一次仿真视角切换)

本文为CST仿真系列教程的第3讲,主要介绍传输线阻抗(TDR)的两种仿真方法:基于S参数的频域计算和基于高斯脉冲的时域计算。文章详细演示了在CST PCB Studio中修改电容参数、设置TDR仿真参数(包括截止时间和采样点数)的操作步骤,并通过对比实验展示TVS寄生电容对阻抗曲线的影响。最后将两种TDR方法的结果进行对比,验证了两种方法的一致性。本教程适合硬件工程师通过时域波形直观分析传输线阻抗特性,是信号完整性分析的重要技能。

一只豌豆象的博客 226

poj 2549 Sumsets(hash)

题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=23666 a+b+c=d 转化: a+b=d-c。这就变成了查找问题。1000*1000/2=500000,所以需要5e5大的空间装散列表。下面用hash拉链法和开放地址法来实现: 拉链法,存储结构即用到了链式前向星的思想。 #include #include #

theArcticOcean 913

6.10华为OD机试真题 新系统 - 查找温度记录统计信息 (Java/Py/C/C++/Js/Go)

6.10华为OD机试真题 新系统 - 查找温度记录统计信息 (Java/Py/C/C++/Js/Go)

算法大师! 434

POJ 2549 Sumsets hash

G - Sumsets Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu SubmitStatus Description Given S, a set of integers, find the largest d such that a + b + c = d where a, b, c,

Katapeltes 657

30天入门 SAP BTP 开发系列之十四: 将 SAP Business Application Studio 里开发好的 Node.js 应用部署到 Cloud Foundry 环境中

本教程详细介绍了如何将SAP Business Application Studio中的Node.js应用部署到Cloud Foundry环境。在完成本地开发和测试后,通过cf login命令连接Cloud Foundry环境,配置manifest.yml文件指定应用参数和路由信息。使用cf push命令完成应用的上传和部署,最终使应用运行在SAP BTP的云端环境中。教程包含从路由创建到部署验证的完整流程,确保开发者能够成功将Node.js应用发布到生产环境。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1074

基于STM32、HAL库的CH9434总线转UART驱动程序设计

CH9434是一款USB转4串口控制芯片,可以将单个USB接口扩展为4个独立的串口(UART)。支持多种数据格式(数据位5-8,停止位1/1.5/2,奇偶校验或无校验)// 读取接收到的数据。// 重新启动接收中断。// 向所有4个串口发送数据。// UART初始化函数示例(USART1)// 其他UART初始化函数类似...// 初始化CH9434。// 初始化UART1。// 初始化UART2。// 初始化UART3。// 初始化UART4。工作电压:3.3V/5V兼容。

corlin6688的博客 989

Uva10125/POJ2549——Sumsets(中途相遇法,hash)

A. Sumsets Time Limit: 3000ms Memory Limit: 131072KB 64-bit integer IO format: %lld      Java class name: Main Submit Status [PDF Link] Problem C - Sumsets Given S, a set of

Reverie 620

Ardupilot chibios主函数学习(1)

目录 文章目录目录摘要第一部分chibios主函数**(1)主回调函数入口****(2)主回调函数入口****(3)主回调函数入口****(4)主回调函数入口**1.函数hal.scheduler-&amp;amp;amp;amp;amp;amp;amp;gt;init()分析 摘要 本节主要记录自己学习Ardupilot的 chibios代码过程,欢迎批评指正。 第一部分chibios主函数 (1)主回调函数入口 AP_HAL_MAIN_...

陌城烟雨 4243

UVa 10125 - Sumsets

题目链接: UVa : http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1066 poj :   http://poj.org/problem?id=2549 类型: 哈希, 二分查找 原题: G

D_Double's Journey 2687

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

对于给定的整数集合S,求出最大的d,使得a+b+c=d。

对于给定的整数集合S,求出最大的d,使得a+b+c=d。a,b,c,d互不相同,且都属于S。集合的元素个数小于等于2000个,元素的取值范围在[-2^28,2^28 - 1],假定可用内存空间为100MB,硬盘使用空间无限大,试分析时间和空间复杂度,找出最快的解决方法。 提示:两两相加转为多项式乘法,比如(1 2 4 6) + (2 3 4 5) => (x + x^2 + x^4 + x^6)

Edwards_June的专栏 2617

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【哈希】1551:Sumsets

1551:Sumsets查看提交统计提问总时间限制: 1000ms内存限制: 65536kB描述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.输入Several S, each consisting of a...

cym的博客 779

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

poj Sumsets 2549 (二分+转换)

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 =

yanghui07216的博客 493

POJ2549【hash分离链接法】

题意: 给n个不同的数,求一个4个数(a,b,c,d)的组合满足a+b+c=d;求最大的d。 思路: 没想到可以用hash搞/ 这个就是数据结构里的分离链接法~ 解决hash冲突的方法:将所有关键字为同义词的结点链接在同一单链表中。 a+b+c=d转化成a+b=d-c; 先将所有的a+b hash掉。 然后用 d-c 去找。 复杂度n^2*HASH; #includ...

weixin_30550271的博客 192

uva10125

题意:给出一个数集S中所有元素,问是否存在d属于S使得d=a+b+c,且a,b,c均属于S?若有,则输出最大的d 否则输出no solution 做法:暴力就可以过的。 代码如下: #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; #define zz using nam...

weixin_33845477的博客 180

poj 2549 --- 传说中的用“桶”防止HASH冲突

http://poj.org/problem?id=2549 维基百科有3Sum算法:https://en.wikipedia.org/wiki/3SUM sort(S); for i=0 to n-3 do a = S[i]; k = i+1; l = n-1; while (k<l) do b = S[k]; c =

Pilgrim 1492

uva 11039

#include #include int vis[1000010]; int main() { int T; scanf("%d",&T); while(T--) { int q; memset(vis,0,sizeof(vis)); scanf("%d",&q); while(q--) { int x; scanf("%d",&x); if(x>0

sky_zdk的博客 360

UVA10125

先给出数字的数量n,然后是n个数字。 问能不能找出最大的d = a +

潜水的程序猿 564

POJ 2549 Sumsets

题目 题目大意 给定一组整数,求最大的d,使得a + b + c = d,其中a、b、c和d是S的不同元素。 1 <= n <= 1000,表示以S为单位的元素数,后跟S元素,每行一个。 S的每个元素都是介于-536870912和+536870911之间的不同整数。 最后一行输入包含0。 对于每个S,一行包含d,或者一行包含“no solution”。 题目分析 先来他...

xxxLJYing的博客 420

POJ 2549 Sumsets hash值及下标

题目大意:找到几何中的4个数字使他们能够组成 a+b+c=d ,得到最大的d值 我们很容易想到a+b = d-c 那么将所有a+b的值存入hash表中,然后查找能否在表中找到这样的d-c的值即可 因为4个数字都不能相同,那么我们同时要在hash表中记录相加两个数的下标,然后查找的时候还要进行下标判断 这里用二分查找也可以,但是能用hash还是hash快地多了 这...

weixin_30696427的博客 156

POJ-2549-Sumsets

书上说的解法应该是中途相遇法,网上搜索了下原来意思是将a+b+c=d拆分成 a+b=d-c进行搜索答案,搜索的时候用了二分的方法。 代码: #include #include #include #include using namespace std; const int inf=-600000000; int a[1001]; int main() { int n; whil

z309241990的专栏 2460

UVA 10970

#include<iostream> using namespace std; int main() { int m,n; while(cin>>m>>n) { cout<<m*n-1<<endl; } return 0; } 转载于:https:/...

weixin_30779691的博客 140
上一篇: UVA 11796 - Dog Distance 向量的应用
下一篇: ZOJ 1586 QS Network MST prim水题
hr_whisper
博客等级 码龄14年 132粉丝 322原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值