论OI中无穷大(INF)的取值

为什么我的Floyd会输出负数啊?

为什么我的代码写对了却全都爆零了啊?

那么很可能是你的INF取大/小了!



那么inf到底应该取什么值呢?

首先,inf应该要比一般的题目中出现的数据要大,但是又不能超过max_int。

1e9是一个好选择!

为什么不是0x7fffffff呢?这不是int的最大值吗

因为有的时候(例如Floyd等算法)会出现两个inf相加的情况,如果inf取max_int则加法会造成溢出,而取1e9则不会出现这样的情况。

但是初始化会不会很麻烦?

答案是肯定的,谁都不愿意为了一个初始化去写循环,又慢而且还麻烦。

我们注意到0x3f3f3f3f的每8位(int为32位)二进制位上都是0x3f,所以我们可以方便的使用memset来方便的初始化数组

而0x3f3f3f3f等于1061109567,2*inf=2122219134,即使是两倍的inf也并不会溢出

综上所述,inf的选择应该是0x3f3f3f3f

当然如果没有加法操作用0x7f7f7f7f也是可以的,初始化时直接用memset 0x7f就可以了

<完>

原文地址:https://www.cnblogs.com/beilili/p/8856495.html

时间: 2024-10-01 04:19:29

论OI中无穷大(INF)的取值的相关文章

关于JAVA中Byte类型的取值范围的推论(*零为正数,-128在计算机中的表示方法...)

先看一段推理<*一切都是在8个比特位的前提下,讨论二进制的符号位,溢出等等,才有意义*> +124:0111 1100 -124:1000 0100 +125:0111 1101 -125:1000 0011 +126:0111 1110 -126:1000 0010 +127:0111 1111 -127:1000 0001 +128:0 1000 0000   -128:1000 0000 从上述过程对比可以看出:+128是在127的基础上加1得到,但是会造成溢出(JAVA中byte的大小

SSH中各种形式的取值方式

现在这个项目是用SSH来开发的,遇到很多取值方式,在此总结一下,因为一直在用,很容易弄混,取值有问题: JSP通过url参数值取值: 例如:http://127.0.0.1:8080/portal/login!toAddPag.action?keyCode=1234555 通过以下语句取值: <% String keyCode=request.getParameter("keyCode"); %> 在页面中显示值:有以下两种方式: 第一: <%=keyCode  %&

Django2.0中的on_delete字段取值含义

在Django的2.0版本中,外键字段 ForeignKey 和一对一字段 OneToOneField 都必须设置 on_delete 属性,否则会有以下报错: TypeError: __init__() missing 1 required positional argument: 'on_delete' 对于on_delete字段的取值含义如下: on_delete=None, # 删除关联表中的数据时,当前表与其关联的field的行为 on_delete=models.CASCADE, #

java中为什么byte的取值范围是-128到+127

概念:java中用补码表示二进制数,补码的最高位是符号位,最高位为“0”表示正数,最高位为“1”表示负数.正数补码为其本身:负数补码为其绝对值各位取反加1:例如:+21,其二进制表示形式是00010101,则其补码同样为00010101-21,按照概念其绝对值为00010101,各位取反为11101010,再加1为11101011,即-21的二进制表示形式为11101011 步骤:1.byte为一字节8位,最高位是符号位,即最大值是01111111,因正数的补码是其本身,即此正数为0111111

angularjs环境中为Tinymce编辑器取值或赋值

Tinymce版本,5.2.1 html: 取值或赋值, 方法1: 方法2: 原文地址:https://www.cnblogs.com/insus/p/12677535.html

CATransform3D中m34字段的取值含义

转载自:http://zhidao.baidu.com/link?url=OlVQoGOKIBmaXKgQisOLtzliTLPvreOOsRmny3yebA1Wb6-B3KtuKlRXmv0tO3y4S1rVjs8Ie-0EKSCfMzkN5V1mo2nmoSzFm33L9r7-_KG 我也不能解释的很清楚,说的不对的其他童鞋指正下: transform的结构如下:struct CATransform3D{ CGFloat m11, m12, m13, m14; CGFloat m21, m2

fopen()函数中参数mode的取值

FILE * fopen(const char * path,const char * mode); 参数mode字符串则代表着流形态. mode有下列几种形态字符串: r 打开只读文件,该文件必须存在. r+ 打开可读写的文件,该文件必须存在. rb+ 读写打开一个二进制文件,只允许读写数据. rt+ 读写打开一个文本文件,允许读和写. w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失.若文件不存在则建立该文件. w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会

c++中char类型的取值范围

-128~127,数字在计算机中以补码形式存储,因为正数的补码就是其本身且正数符号位置0,故最大值为01111111(一个0七个1)也就是127 而负数是对应正数值取反加一,拿最大的负数-1来说,就是1取反+1 00000001(七个0一个1) 11111110(七个1一个0),加1 11111111(八个1),再加一个就进位变成0 对于最小的负数-128来说 10000000(一个1七个0) 01111111(一个0七个1),加1 1000000(一个1七个0),再减一的话就变成0111111

关于无穷大数INF的取值

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