You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.0 KiB
2.0 KiB
Q
:在OI中,将int 宏定义 为 long long是不是一种合理的技巧?
#define int long long //十年OI一场空,不开long long见祖宗
我曾经写过很长一段时间 #define int long long。先说一下这么做可能可以发挥作用的场景:有些题目虽然输入数据和答案都是 int 类型,但是可能在计算过程中出现了乘法或大量加法运算导致爆 int。并且不用担心乘法运算忘了写 1ll*。可避免程序前后类型不符。有的选手在写函数的时候,总是习惯把形参写为 int 类型,却无意中传入了 long long 类型的数据。我的一个朋友省选的时候,使用 sort 给 long long 类型数组排序时传入了一个参数都是 int 的自定义比较函数,爆零。再说一下这么做的弊端:常数大。我曾经做一道 POJ 的题目,死活 TLE,怎么卡常都 AC 不了。后来把 define 注释掉就过了。有时候会不小心 MLE。长时间这么写,会导致思维懒惰,做题不愿意思考「这题应不应该开 long long」,写代码也不注意变量类型等细节。别人读代码会很别扭。有人提到了「骗 Hack」行为,我个人认为「骗 Hack」没有太大意义。如果你的教练比较[数据删除],你可能会被教练骂。综上,不建议使用这种 define。不过如果有题目死活 WA 调不出来,可以 define 一下看看是不是溢出所导致的错误。如果是,再把 define 去掉,好好思考一下是哪里溢出了。
Q
:为什么说次数多的循环放在内层会比较快?
A
:为什么说次数多的循环放在内层会比较快?特别是内外层循环的量级差别很大的时候。所有编程语言都是这样吗?
比如
for i=1 to 10
for j=1 to 10000
Do something...