关于如何在竞赛时取无穷大

ps:本文章转载自博客:菜鸟的奋斗

博客链接

为什么我们不用0x7fffffff:

我们平时在考试时一般会取0x7fffffff(7个f)因为这是int类型的数的最大值的16进制表示法,但这个取值有以下Bug:

0x7fffffff会出现错误,比如溢出,这样两个无穷大数相加会变成负数,还有如在做dijkstra求最短路时,当做松弛操作,判断if (d[u]+w[u][v]<d[v]) d[v]=d[u]+w[u][v]时,若u到v没有路径,w[u][v]=0x7fffffff,这样d[u]+w[u][v]会变成负数,这就产生了错误。

用0x3f3f3f3f好处都有啥:

  1. 0x3f3f3f3f的10进制表示为1061109567,这个数已达到10^9,足以表示无穷大,又0x3f3f3f3f+0x3f3f3f3f=2122219134,满足无穷大+无穷大仍为无穷大
  1. 当把无穷大设为0x3f3f3f3f时,在做初始化时也很方便,比如在初始化数组a时,可以使用
    Memset(a,0x3f,sizeof(a)),因为0x3f3f3f3f的每个字节都是0x3f,如果使用0x7fffffff,需要循环赋值,耗费更多时间

猜你喜欢

转载自www.cnblogs.com/lixiao189/p/9300813.html
今日推荐