Files
python/TangDou/AcWing/常见问题.md
HuangHai 1f397eca87 'commit'
2025-08-30 18:35:01 +08:00

19 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## $Q$:在OI中,将int 宏定义 为 long long是不是一种合理的技巧?
```c++
#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$:为什么说次数多的循环放在内层会比较快?特别是内外层循环的量级差别很大的时候。所有编程语言都是这样吗?
比如
```c++
for i=1 to 10
for j=1 to 10000
Do something...
```
[系统优化之"大循环在内,小循环主外"为什么会效率高](https://blog.csdn.net/jianxin1009/article/details/10052553)
[算法学习笔记](https://www.zhihu.com/column/c_1182444932760125440)