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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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...

系统优化之"大循环在内,小循环主外"为什么会效率高

算法学习笔记