memset有毒 神坑!!!! Educational Codeforces Round 49 (Rated for Div. 2)(C题)

在Educational Codeforces Round 49的C题中,作者遇到了一个意料之外的Time Limit Exceeded(TLE)问题。尽管算法复杂度为O(nlogn),在n=1e6的情况下本应足够,但代码却在多组样例中超时。经过检查,作者排除了数组范围、死循环等因素。最后,发现是memset函数导致的问题,将其替换为fill函数或者不进行初始化都能通过测试。作者提醒大家慎用memset,并推荐使用fill函数。
摘要由CSDN通过智能技术生成

昨天打cf,写到C题,转化题意之后,写了一个只包含几个一重循环的代码,外加一个排序,也就是O(n)+O(nlogn)的算法,复杂度也就是O(nlogn),心想n也就是1e6,时间给了两秒,妥妥的够啊,于是过了样例,就交了一发,结果。。。T了???!!!

当时那叫一个纳闷啊,你说你判我wa了,我也认了,结果我一个nlogn的代码,T了?。。。于是就立即检查是否范围不够啊,检查数组范围是够的,数据范围也是够的,接着心想呐,难道代码有潜在的死循环???于是巴拉巴拉找了一通,结果一通分析,认定自己的循环都可以跳出来,铁定不会死循环,于是我就自闭了,最后只能试着说服自己,可能样例个数T比较多,于是疯狂的优化代码,用了基数排序,把代码优化到O(n),又交了一发,心想这回应该A了吧,结果多过了一个样例,又T了。。。。。

于是开始怀疑人生,。。。

第二天,心里难受啊,疯狂找原因,找了一天,终于找到原因,就是memset函数,把它注释掉就过了,简直有毒,神坑!!!

百度几篇博客,有人说,当有多组样例时,memset函数的确比较耗时。。。。心里难受啊,接着用fill函数代替memset,也过了。所以,以后再也不用memset函数了!!!用fill函数代替它!

下面附上用时第一个是用fill函数,第二个是用memset函数,第三个是直接没有初始化(我也不清楚为什么不需要初始化。。。。)

 

附上fill函数的用法:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值