一、
1. 数值范围的不同
LLONG_MAX是 C++ 标准库中定义的 最大的long long类型数值(即9223372036854775807),它是一个非常大的数。0x3f3f3f3f是一个十六进制数,转换为十进制为 1061109567,虽然它也很大,但相比于LLONG_MAX,差了很多个数量级。如果你使用的是
0x3f3f3f3f作为初始值,而问题的解可能要求的最优值非常接近或超过这个数(例如,数值范围接近10^{12}或者更大),那么0x3f3f3f3f可能不足以表示“无穷大”或一个足够大的初始值。在这种情况下,结果可能会被这个初始化值限制,导致无法正确更新res,从而输出错误的结果。2.
0x3f3f3f3f的常用场景
0x3f3f3f3f通常在编写动态规划(DP)或者图算法(如 Dijkstra)的过程中用作“无限大”的近似值。这是因为对于某些应用场景(例如较小范围的数值问题),0x3f3f3f3f足够大,并且使用它可以方便地进行内存初始化操作。例如,
0x3f3f3f3f的四字节内存可以用memset()函数轻松初始化一个数组,并且这种方式的性能较好。对于较小的数值范围问题(如int范围内),0x3f3f3f3f作为无穷大值是有效的,但对于更大的问题范围来说,它是不够大的。3.
LLONG_MAX的用途在涉及到
long long类型 的问题时,尤其是问题的输入范围较大(例如 AtCoder 题目中N和K的上限为2 * 10^5,输入的A_i和B_i的最大值可能达到10^6,乘积可能达到10^{12}),需要用long long类型来存储数据。如果初始化res为0x3f3f3f3f,它的值可能不足以捕获那些非常大的解。而
LLONG_MAX是long long类型能够表示的最大值,这就确保在你的算法中,可以处理更大的问题范围。
二、
1. 9的数学规律
内容:
被除数的各位数字之和与除数的余数有一定关系。具体来说,涉及到一个数学规律:一个数能被 9 整除,当且仅当它的各位数字之和能被 9 整除。
具体分析:
例如:
n = 123
各位数字之和S(123) = 1 + 2 + 3 = 6,不是 9 的倍数,123不能被 9 整除。
n = 999
各位数字之和S(999) = 9 + 9 + 9 = 27,是 9 的倍数,999能被 9 整除。

316

被折叠的 条评论
为什么被折叠?



