Kelf's Blog

悟已往之不谏,知来者之可追。

0%

算法题竞赛中的无穷大

在算法竞赛中,我们常常需要用到设置一个常量用来代表“无穷大”,通常使用 memset 来进行初始化。

1
2
#include<cstring>
void *memset(void *str, int c, size_t n)

memset 的作用 - 会将 c 依次填充到 str 的内存区域。总共填充 n 个 Byte。 - c 虽然是 int,但只取其低 8 位

通常我们设置最大值的形式为:

1
memset(arr,0x3f,sizeof arr);

(1)为什么不全部取最大值?

比如对于 int 类型的数,有的人会采用 INT_MAX,即 0x7fffffff 作为无穷大。但是以 INT_MAX 为无穷大常常面临一个问题,即加一个其他的数会溢出

(2)为什么不是 0x4f0x5f

因为 0x4f + 0x4f 会导致溢出,即无穷加无穷会错。

参考资料

  • https://www.acwing.com/file_system/file/content/whole/index/content/4799/