ACM中无穷大,无穷小的设定

【竞赛】为啥用0x3f代表无穷大 以及memset用法简析 解释为啥用0x3f代表无穷大 以及memset用法简析 阅读详情


如果问题中各数据的范围明确,那么无穷大的设定不是问题,在不明确的情况下,很多程序员都取0x7fffffff作为无穷大,因为这是32-bit int的最大值。如果这个无穷大只用于一般的比较(比如求最小值时min变量的初值),那么0x7fffffff确实是一个完美的选择,但是在更多的情况下,0x7fffffff并不是一个好的选择。

  1. 很多时候我们并不只是单纯拿无穷大来作比较,而是会运算后再做比较,例如在大部分最短路径算法中都会使用的松弛操作:
    if (d[u]+w[u][v]<d[v]) d[v]=d[u]+w[u][v];
    我们知道如果u,v之间没有边,那么w[u][v]=INF,如果我们的INF取0x7fffffff,那么d[u]+w[u][v]会溢出而变成负数,我们的松弛操作便出错了,更一般的说,0x7fffffff不能满足“无穷大加一个有穷的数依然是无穷大”,它变成了一个很小的负数。
  2. 除了要满足加上一个常数依然是无穷大之外,我们的常量还应该满足“无穷大加无穷大依然是无穷大”,至少两个无穷大相加不应该出现灾难性的错误,这一点上0x7fffffff依然不能满足我们。

所以我们需要一个更好的家伙来顶替0x7fffffff,最严谨的办法当然是对无穷大进行特别处理而不是找一个很大很大的常量来代替它(或者说模拟它),但是这样会让我们的编程过程变得很麻烦。在我读过的代码中,最精巧的无穷大常量取值是0x3f3f3f3f,我不知道是谁最先开始使用这个精妙的常量来做无穷大。

  1. 0x3f3f3f3f的十进制是1061109567,也就是10^9级别的(和0x7fffffff一个数量级),而一般场合下的数据都是小于10^9的,所以它可以作为无穷大使用而不致出现数据大于无穷大的情形。
  2. 另一方面,由于一般的数据都不会大于10^9,所以当我们把无穷大加上一个数据时,它并不会溢出(这就满足了“无穷大加一个有穷的数依然是无穷大”),事实上0x3f3f3f3f+0x3f3f3f3f=2122219134,这非常大但却没有超过32-bit int的表示范围,所以0x3f3f3f3f还满足了我们“无穷大加无穷大还是无穷大”的需求。
  3. 最后,0x3f3f3f3f还能给我们带来一个意想不到的额外好处:如果我们想要将某个数组清零,我们通常会使用memset(a,0,sizeof(a))这样的代码来实现(方便而高效),但是当我们想将某个数组全部赋值为无穷大时(例如解决图论问题时邻接矩阵的初始化),就不能使用memset函数而得自己写循环了(写这些不重要的代码真的很痛苦),我们知道这是因为memset是按字节操作的,它能够对数组清零是因为0的每个字节都是0,现在好了,如果我们将无穷大设为0x3f3f3f3f,那么奇迹就发生了,0x3f3f3f3f的每个字节都是0x3f!所以要把一段内存全部置为无穷大,我们只需要memset(a,0x3f,sizeof(a))。

所以在通常的场合下,0x3f3f3f3f真的是一个非常棒的选择。

无穷小:

const int NINF = -INF -1;  
const int NINF = 0xc0c0c0c0;  


同样可以用memset对数组进行无穷小初始化!
原帖:http://blog.youkuaiyun.com/u010129448/article/details/37941123
【C语言学习笔记】MEMSET函数的使用 MEMSET函数的使用 要使用memset函数首先要预加载库<string.h> 函数的使用 memset(*p, int c, n) 函数名(要操作的数组首地址, 要替换的字符, 要替换的长度) *要替换的值虽然以int形式传递,但在执行填充替换操作时使用的是该值的无符号字符形式。 *要填换的长度n指的是前n项,一般是全部替换,特殊情况除外。 通过实际例题来感受下用法 #include <stdio.h> #include <string.h> int main() 阅读详情

相关推荐

深度学习中nan和inf的解决

1、 nan 和inf产生原因 搭建神经网络后产生的,在训练早期,模型参数可能不是很合适,会出现梯度消失和爆炸的情况,特别是有lstm,rnn这类网络的情况。nan 是not a number ,inf是无穷大。比如求损失函数会用到log,如果输入接近0,那么结果就是inf。 2、解决方法 2.1 学习率要设置小一些 2.2使用带上限的激活函数,如tf.nn.relu6 也就是对输出做了限制 2.2 检查输入数据中是否有nan或inf x = tf.constant([5.0, 4.8, 6

ytusdc的博客 5345

编程中无穷大常量的设定技巧

本文转自:http://aikilis.tk/2471.html 编程中无穷大常量的设定技巧 如果问题中各数据的范围明确,那么无穷大的设定不是问题,在不明确的情况下,很多程序员都取0x7fffffff作为无穷大,因为这是32-bit int的最大值。如果这个无穷大只用于一般的比较(比如求最小值时min变量的初值),那么0x7fffffff确实是一个完美的选择,但是在更多的情况下,0x7

Bob Lee's Blog For CS 5214

POJ1860 Currency Exchange(最短路径)

题意:: 有n种货币,m种兑换方式,每次兑换是这样计算的:如果一开始有V单位b货币,Rab是从a换到b的汇率,Cab是交换需要的手续费,最后能换到(V-Cab)*Rab单位b货币。一开始的货币种类是s,要求最后换回s,问能否进行一系列兑换,使最后换回s时钱增加。 要点: 如果能够经过一个回路返回起点使钱增加,那么可以经过无数次回路,使钱无限增多。所以就转化为bellman算法求是否有负权回路

SeasonJoe的博客 500

【关于无穷大0x3f3f3f的一些知识】

【关于无穷大0x3f3f3f的一些知识】 0x3f3f3f3f的十进制是1061109567,也就是109级别的(和0x7fffffff一个数量级),而一般场合下的数据都是小于109的,所以它可以作为无穷大使用而不致出现数据大于无穷大的情形。 另一方面,由于一般的数据都不会大于109,所以当我们把无穷大加上一个数据时,它并不会溢出(这就满足了“无穷大加一个有穷的数依然是无穷大”),事实上0x3f3f3f3f+0x3f3f3f3f=2122219134,这非常大但却没有超过32-bit int的表示范围,所以

weixin_52115456的博客 1204

在运行opencv时出现的两个问题:AttributeError: module ‘cv2‘ has no attribute ‘gapi_wip_gst_GStreamerPipeline‘

解决了opencv的两个问题:由问题一引出 AttributeError: module 'cv2' has no attribute 'gapi_wip_gst_GStreamerPipeline' cv2.error:OpenCV(4.1.2)C:\projects\opencvpython\opencv\modules\highgui\src\window.cpp:717:error: (-2:Unspecified error) The function is not implemented...

hu_yinghui的博客 3274

论文记录:Affine Formation Maneuver Control of Multiagent Systems

多智能体编队控制仿真记录 实现功能:平移/旋转/尺寸缩放/shear,见截图 注意:本仿真图只是起到了演示效果,中间过程速度产生突变,实际中是不允许的。需要进行速度规划,这一点论文中仿真图更为贴合实际。 参考论文:Zhao, S. (2018). Affine Formation Maneuver Control of Multiagent Systems. IEEE Transactions on Automatic Control, 63(12), 4140–4155. 突然发现有个博主写得很好,参考:

W1H1J1的博客 2108

ACM无穷大设置

无穷大[cpp] view plain copyconst int INF = 0x3f3f3f3f;  这样设置的好处是可以通过memset直接对连续的内存进行无穷大初始化,如下[cpp] view plain copymemset(blockptr,0x3f,blocksize);  无穷小[cpp] view plain copyconst int NINF = -INF -1;  cons...

智浩的博客 325

ubuntu20.4源码安装最新gcc(gcc V12.2)

Ubuntu20.4自带的gcc为V9.4.0的版本,老版本的gcc存在不支持新版本C语言规范,在配置、编译、安装应用软件或工具时,可能存在不能正确安装的问题。(比如:libpqxx-7.7.4在配置时要求c++17版本的支持,但gcc V9.4.0版本不支持c++17)。因此本文介绍ubuntu20.4的系统下载最新gcc12.2版本源码,并进行本地编译、安装。本节内容包括gcc12.2的必备库安装和gcc12.2安装两部分内容组成。

q544344318的博客 1万+

ACM中关于无穷常数的设置

无穷大 const int INF = 0x3f3f3f3f; 这样设置的好处是可以通过memset直接对连续的内存进行无穷大初始化,如下 memset(blockptr,0x3f,blocksize); 无穷小 const int NINF = -INF -1; const int NINF = 0xc0c0c0c0; 与无穷大类似,可以使用memset对连续内存进行无穷小初

Kiritow的学园 2142

1.triton镜像使用

1)拉取镜像2)启动容器指定模型仓库时可以执行server下的./fetch_model.sh,见2.2部分GPU版本的启动CPU版本的启动区别只在于--gpus=1这个参数注意:docker19.03之前的版本使用gpu要指定显卡硬件名,docker19.03之后的需要安装nvidia-container-toolkit或nvidia-container-runtime安装之后要重启docker查看gpus参数是否安装成功重新执行我遇到了如下错误先使用非GPU版本的。

天启的博客 2077

Homebrew国内镜像自动安装全攻略:从零到精通

本文提供了一份详尽的Homebrew国内镜像自动安装指南,旨在帮助Mac用户,特别是国内开发者,快速、无痛地部署这一强大的包管理器。通过使用优化的国内镜像脚本,实现一键自动安装,有效解决官方源访问缓慢或失败的问题。文章从安装前准备、脚本执行步骤、原理讲解到日常使用命令和常见问题排查,提供了从零到精通的完整路径,让用户在短时间内掌握Homebrew的核心用法,提升开发与工作效率。

a0b1c2d3的专栏 967

ACM无穷常数的设置

无穷大 [cpp] view plain copy   const int INF = 0x3f3f3f3f;   这样设置的好处是可以通过memset直接对连续的内存进行无穷大初始化,如下 [cpp] view plain copy   memset(blockptr,0x3f,blocksiz

兔清风的博客 575

论文工具——写论文好用的绘图工具(甘特图+流程图+网络模型图+泳道图)

* 在写HiFi-GAN论文的代码阅读过程中,我发现仅仅通过文字来描述网络结构,不够详细,所以想绘制出网络结构图,更加具象化的描述出网络结构。想去花了,才发现之前都是通过在线绘图网站画的,费时费力,所以想找一些专门的网站化出比较规范并且高质量的图。一方面是为了方便讲解,提高论文的质量,另外一方面也是为了以后写论文打下良好的基础。 * 这篇文章会根据我以前的画图经验展开,以前是使用绘图软件,手动绘图。后来,看到了其他的方法,但是需要写一些代码,或者需要安装特定的软件,投入成本太大,就没有学。所以,本文分享的工

Blackoutdragon的博客 1万+

盘点那些ACM中的无穷大

1. 1e9+7 这里的"e"是乘方的意思,所以他的准确值就是10^9+7,也就是1000000007。这个整数在int范围内,而且它是一个很大的质数,所以是很多初学者常用的一个数。 用法: const int maxn=1e9+7; 2.1e9+9 这个和上面一个差不多,也是一个质数,但是不常用。 3.0x3f3f3f3f 这是16进制中的一个数,等于1061109567,和1e9+7一个数量级,都是十的九次方。它加上一个常数没有超过int范围,乘以2也没有超过int范围。但是它最好的地方

standard_input的博客 273

【大模型应用开发-大模型知识】(二)大模型分类和常见大模型

目前包含 Claude 和 Claude-Instant 两种模型可供选择,其中 Claude Instant 的延迟更低,性能略差,价格比完全体的 Claude-v1 要便宜,两个模型的上下文窗口都是 9000 个token(约 5000 个单词,或 15 页)它的目标是“更安全”、“危害更小”的人工智能。Google 还开发了多种 PaLM 的改进版本。更强大的基础模型: ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。

1万+

复旦微FMSH_Procise安装全流程详解:从环境配置到实战避坑指南

通过本文的全流程解析+实战技巧,开发者可快速掌握Procise在复旦微芯片开发中的核心应用。未来随着AKConv轻量级架构(参考往期文章)等创新技术的融入,国产芯片开发生态将更加完善。立即关注本专栏,获取最新多镜像切换指南与Linux SDK实战教程!扩展阅读复旦微在线升级BOOT.BIN全解析H7-TOOL实现复旦微脱机烧录(注:本文实验环境为Windows 10 x64 + FMQL45T-CORE开发板,部分操作可能因版本更新调整)立即行动下载本文配套配置文件:[GitHub链接]加入技术交流群。

QQ_778132974的博客 3236

0x3F3F3F3F——ACM中的无穷大常量

在算法竞赛中,我们常常需要用到设置一个常量用来代表“无穷大”。 比如对于int类型的数,有的人会采用INT_MAX,即0x7fffffff作为无穷大。但是以INT_MAX为无穷大常常面临一个问题,即加一个其他的数会溢出。 而这种情况在动态规划,或者其他一些递推的算法中常常出现,很有可能导致算法出问题。 所以在算法竞赛中,我们常采用0x3f3f3f3f来作为无穷大。0x3f3f3f3f主要有如...

weixin_30908941的博客 271

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

大一软工第四周学习总结(正课第二周)

我的学习和生活的节奏稳定了下来,学习效率变高了。

Aye_Jun的博客 300

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ACM之预测赢家

题目如下 零和博弈问题:表示所有博弈方的利益之和为零或者是一个常数,即一方有得其他方必有失,且在博弈中各方是不会合作的。解决此类问题的方法有极小化极大算法等,那就先来学习一下这个极小化极大算法:Minimax算法,是一种找出失败的最大可能性中的最小值的算法。算法伪代码(维基百科)functionminimax(node,depth) ifnodeisa...

weixin_34265814的博客 130

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C - Piggy-Bank HDU - 1114

在acm能够做任何事情之前, 必须编制预算并获得必要的财政支持。这一行动的主要收入来自IBM。这个想法其实很简单,每当一些会员有一点小钱时,他就会把所有的硬币都扔到小猪存钱罐里。这个过程是不可逆转的, 除非打破猪,否则硬币不能拿出来。过了足够长的时间, 存钱罐里应该有足够的现金来支付所有需要支付的费用。 但存钱罐存在很大问题:不可能确定里面有多少钱。所以我们可能敲破猪才发现没有足够的钱。显然, ...

nenuyear 614

2018-7-16 ACM 刷题日记

&lt;Codeforces - 702C&gt;题意:    给两个数组,让第一个数组里每个元素,都与第二个数组的每个元素求差再取绝对值,然后找到第一个数组里每一元素对应的这些差值的最小值,再求这些最小值里的最大值。思路:    这是在一套二分专题里的一个题,就是一个二分的思路,有两个封装好的二分函数,lower_bound( ) 和 upper_bound( )。这里介绍下 lower_bou...

FrozenAllen的博客 409

2024年前端最新javascript从入门到高级,每天不停更新知识点(2),月薪20k+的Web前端面试都问些什么

小编的一位同事在校期间连续三年参加ACM-ICPC竞赛。从参赛开始,原计划每天刷一道算法题,实际上每天有时候不止一题,一年最终完成了 600+:凭借三年刷题经验,他在校招中很快拿到了各大公司的offer。入职前,他把他的刷题经验总结成1121页PDF书籍,作为礼物赠送给他的学弟学妹,希望同学们都能在最短时间内掌握校招常见的算法及解题思路。整本书,我仔细看了一遍,作者非常细心地将常见核心算法题和汇总题拆分为4个章节。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

2401_84446513的博客 281

【01背包dp+思维】吉林大学ACM集训队选拔赛(重现赛)B-Subset of Five

传送门 题意:给定n个数,求使得若干数之和模5==0&&使得和最大,输出那个最大和 基本的思路就是拿dp做,dp[i][j]就表示前i项中若干项和模5等于j的最大和的值,不过它可以正向做一波,也可以反向做一波,下面来分别介绍一下 解题思路1:上面说了dp[i][j]的意义,明显最后dp[n][0]就是答案,每个数都有选不选两种方案,明显是个01背包,不过核心部位需要一个小小的处理,请看下图 ...

Vison.R的博客 377

计蒜之道2018复赛

待续。。。 A题 考虑任意两个一次函数,哪个放在里面更有 y=ax+b和y=cx+d; sort时满足(ax+b)x+d>(cx+d)x+b即可,在O(n)计算即可 D题 #include<cstdio> #include<cstring> #include<vector> #include<algor...

aoyanwei9065的博客 87

http://acm.hdu.edu.cn/showproblem.php?pid=1114&&完全背包

题意:硬币的数量不限制,让储蓄罐装满时得到的最少价值。 思路:先将完全背包转化成多重背包,再转化成0-1背包来解,不过这里要进行二进制优化,因为这里要保证储蓄罐要装满,所以需要先把容量为0时,价值赋为0,因为让求最小价值,因此需要把大于0的容量都赋为无穷大,如果让求的是装满时的最大价值则要把大于0的容量都赋为无穷小。。。 #include #include #include using n

pursuit的专栏 672

POJ2533-Longest Ordered Subsequence

全解题报告索引目录 -> 【北大ACM – POJ试题分类】 转载请注明出处:http://exp-blog.com ------------------------------------------------------------------------- 提示: 动态规划,求LIS最大不下降子序列 O(n^2)和O(n*logn)算法都能完美AC ...

ζёСяêτ - 小優YoU 4677
上一篇: cin cout 输入输出十六进制,八进制
下一篇: hdu2059 龟兔赛跑
mwhybmj
博客等级 码龄10年 8粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值