首页 > 互联资讯 > 网络资讯  > 

你在编程竞赛中曾经犯过哪些令人窒息的错误?

这题我会。

2019年多省省选D1T2,字符串问题。

我这辈子都不会忘记2019年4月6日的那一天,那一天,因为一个小小的 j<=n ,我的人生轨迹改变了。

HEOI2019Day1场上看完T2后立马秒出“SA+二分+线段树优化建图+Tarjan缩点DAGDP”的十分套路的80分做法,当时也懒得接着想100分做法,就为了省选求稳写了这个。

这做法看上去十分简单对吧,事实上也十分简单,你只需要把SA、ST表(划重点)、拓扑排序、Tarjan、线段树优化建图这几个东西的板子都写一遍,然后拼一拼就好了,我场上代码有将近200行……

然后大样例调了调后过了,然后再把T3随便写了写,就觉得Day1能有200+,进队应该稳了。

呵呵。

Day1考完后我怀着将要进队的兴奋心情去秦皇岛的海边转悠了一圈,回来后发现教练在门口等着我,一见我就劈头盖脸一顿骂:“你去哪了,我找你找半天了!”

然后……窒息时刻它来了……

“你知不知道,你Day1只有135分!”

????

“你的T2只有10分!”

????????????

“你现在赶紧把你程序测一下,万一还能申诉呢。”

于是我赶紧去把D1T2的选手代码找出来交到洛谷上,然后……

这?这不就是80分吗?没有任何问题!!赶紧申诉啊!

然后正当我喊教练过来看的时候,突然想起来一个事……

我好像没在洛谷上开O2?

不对!我好像在场上Debug的时候全程没开O2!

然后我把O2打开再交了一发,果然……

什么叫窒息?这个就叫窒息啊……原来我是吸氧而死!

事已至此,一切都凉了,那就找一下这个代码里哪错了吧,死也要死个明白不是?

给你们看一下我当时的出锅部分代码,如果你们谁能几秒内看出来哪错了算我输……

(我**的以后再也不压行了啊啊啊)

毕竟事后诸葛亮,我还真找了出来,大家请看这段代码里的ST表构建部分(蓝圈位置):

会写ST表的朋友们都知道,这里不应该写成 j<=n ,正确写法应该是 j+(1<<i)<n ,不然的话后面那个 st[j+(1<<(i-1))][i-1] 会导致数组下标超出 n 的范围!

我当时的ST表数组是这么开的:

int st[200001][18];

而这个题的数据范围是:

我代码中的 n 就是 |S| ,也就是说,除了第一个点之外,90%的测试数据都会让我的数组越界!

众所周知,不开O2的时候数组越界在一些情况下是不会RE的,但是省选是开O2的。

……

讲一下这个事的后续吧。

后续就是,这吸氧而死坑的70分直接把我送出省队,要是不开O2我就进队了……

然后也十分不甘心就这么AFO,就氪金买了个D……

在之后训练时就一直反思自己省选翻车的根本原因,很大程度上是,场上发现这题会做,觉得自己稳了,就在打代码的时候高兴的不得了,一高兴,手一滑,就让数组下标超范围了,巧合的是测大样例的时候我也忘了在本机开O2,也没发现有啥毛病。所以归根结底还是自己水平不行啊,菜是原罪……

(哦顺便说句我现在的ACM队友之一也死于那个D1T2……真是有缘呢)

后来上大学后很多没有OI基础的同学觉得程序设计课学起来十分吃力,代码里总是有好多错误,就问我怎么避免,然后我就跟他们说:

“你经历过一个小小的数组越界导致人生的改变吗?经历了你就记住了,就不敢再出bug了。”

你在编程竞赛中曾经犯过哪些令人窒息的错误?由讯客互联网络资讯栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“你在编程竞赛中曾经犯过哪些令人窒息的错误?