如何少见到点祖宗?

自宇宙大爆炸以来,开不开 long long 一直是 OIer 们挂分的主要原因之一,总会有个变量在你不经意间就炸 int 了(你看宇宙它都炸了)。那么我们应该如何柯学预防/治疗这件事?

如何预防

一种常见的简单粗暴的方式就是不管数据范围,直接全开 long long,但在有些题目下你的内存会直接炸掉,而且防的了 long long 防不了 unsigned long long,属于是治标不治本了。

在读题时我们就应该看清数据范围(思考题目前就应先看数据范围!),确定好每一个变量是什么类型,尤其 $\le 2^{64}$ 需要开 ull 而不是 ll,更大则需 int128 或高精度。当然代码中用到的变量肯定不止题目给你的这些,定义变量和给变量赋值,用变量运算时都应当去想清楚范围,举两个粒子:

W 在写二分时清楚的算出了l,r<=2e9,于是他就没开 ll,于是痛失25分。

l,r本身确实不会炸 int,但在二分时我们会用到 (l+r)/2 这个东西,但 l+r 这个运算显然是会炸 int 的!所以 l,r 需要开 ll,不过 mid 在这里并不用开 ll。

W 在写某题时清楚的意识到变量 x 需要开 ll,但他写了亿堆代码后写下了一行 int z=x;,于是痛失55分。

典型的赋值时没想清楚数据范围,等写完代码后再找BUG根本找不到。

当然,要是都能这么仔细的话大家就不会因为不开 ll 挂分这么惨了,嘴上说着要检查,写着写着一不留神就忘了。所以我们应当在写完程序后再检查一遍,也就是如何治疗。

如何治疗

尤其是在比赛时,千万不能对自己太过自信(毕竟某些良心的出题人怎么会让你多花时间来调他造的样例呢,他只给你点再错的程序都能对的样例!),有时间就最好把整个程序的所有变量都看一遍,一个也别漏。

拿上文的第二个粒子来说,W 在经过一阵“不是哥们”后想起来了 long long 这件事,于是他使用快速高亮(一般代码编辑器都会有这个功能,Linux下的gedit里也有快速高亮这个插件)这个功能将所有用到 x 的地方都标了出来,一处一处的查,最后发现了 z 没开 ll。(哈↘哈↘)

大概就这些,但还是这句话,要是都能这么仔细的话大家就不会因为不开 ll 挂分这么惨了。

评论

  1. SmokingTurtle
    7 月前
    2024-11-12 20:18:54

    define int long long是个好东西(确信

  2. 7 月前
    2024-11-12 22:59:09

    也就你每次比赛太自信了吧,总是说题太水,直接切了

    • 博主
      W
      7 月前
      2024-11-12 23:18:00

      题是水,但是是我自己给它挖成水坑了(

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇