昨天打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函数的用法: