当前位置: 首页 > news >正文

论memset的时间代价

论memset的时间代价

众所周知,memset是一个常用的数组赋值方式,几乎每个OI player全都使用过,但是这个函数从来不要脸,也不给你脸。

大家耳顺能详的几个例子:

①memset(a,0,sizeof(a));把a全赋值成0。

②memset(a,255,sizeof(a));把a全赋值成-1。

③memset(a,127,sizeof(a));把a全赋值成一个在int下很大的数。

④memset(a,128,sizeof(a));把a全赋值成一个在int下很小的数。

于是在一题多问的question上,小帅就开始频繁使用这些方式来给数组赋值,由于小帅只关注分数,即使一个测试点用到的时间是998ms,差一点就超时了,也没在意,直到有一天,小帅由于好奇,在网上了解了一些字典树的知识,想要做题,于是做了洛谷上的P8306 【模板】字典树,自觉不错的写了一个代码,认为妥妥的AC,于是写好庆祝词,兴高采烈的提交了上去,结果……36TLE。小帅气坏了,于是调了5个小时,将memset改为for循环赋值就AC了。

由于memset是一个系统封装好的函数,所以人们在初期肯定会误以为他是没有代价的,甚至认为就是一断电的事,可是它的赋值代价其实是和字符串比较的代价是相同的。因此,memset可以用,但不要总用,稍微卡卡常就直接T了。

就像很多事情一样,用memset一旦上瘾就会无法自拔,所以可以这样来改正:自己手写一个my_memset,之后把用for循环赋值的代码写进去,习惯性写完代码后点击“Ctrl”+“F”,点替换,上面的框里写上memset,下面的框里写上my_memset,之后点击替换全部,之后把CE的部分稍微改一下,然后一个崭新的程序就诞生了。

当然,如果不是一题多问,只是一个dp的初始值,用一下还是没有问题的,毕竟人家memset是c++库里面的。

http://www.lryc.cn/news/110791.html

相关文章:

  • linux下绑定进程到指定CPU的操作方法
  • springboot+maven插件调用mybatis generator自动生成对应的mybatis.xml文件和java类
  • C# 根据前台传入实体名称,动态查询数据
  • Netty入门学习
  • 代客泊车对HUT功能交互规范
  • mysql的update_time
  • 避免安装这5种软件,手机广告频繁弹窗且性能下降
  • kafka-事务
  • 【安装】阿里云轻量服务器安装Ubuntu图形化界面(端口号/灰屏问题)
  • Python 扩展 快捷贴士:os模块下的创建目录的方式
  • Hi3798MV200 恩兔N2 NS-1 (一): 设备介绍和刷机说明
  • redis缓存雪崩和缓存击穿
  • 计算机网络(5) --- http协议
  • ubuntu 硬盘操作
  • C#垃圾回收器GC、析构函数(Finalize 方法)和Dispose
  • 第20周 服务容错-Hystrix
  • 浏览器不同源的页面之间如何跨域通信
  • 【云原生】K8S二进制搭建三:高可用配置
  • HOT78-跳跃游戏
  • HDFS中的NAMENODE元数据管理(超详细)
  • 区块链实验室(14) - 编译FISCO-BCOS
  • for(auto iter:vec) 及 for(auto iter:vec) 的典型用法
  • 【iosH5开发】IOS浏览器对于Vue3 Element-plus el-input中,input.value.focus无法聚焦问题
  • 【2023】华为OD机试真题Java CC++ Python JS Go-题目0257-增强的strstr
  • Android 解析ping回复包
  • 在外地ssh远程连接家里ubuntu服务器(Coplar内网穿透)
  • windows创建占用特定端口程序
  • 【uniapp 定位获取详细位置】
  • 后端进阶之路——万字总结Spring Security与数据库集成实践(五)
  • mysql8查看执行sql记录历史,配置开启sql历史日志general_log