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

Posted beilili

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了论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就可以了

<完>

 

以上是关于论OI中无穷大(INF)的取值的主要内容,如果未能解决你的问题,请参考以下文章

python五十七课——正则表达式(多个字符)

matlab 中如何更改三维坐标z轴取值范围。axis只能改x.y

测度论的相关定理

Sigmod函数

ckeditor 前段js配置toolbar以及取值(实用)

协同过滤用户相似度度量