oj的一些技巧。

有关卡常的Oj经验:
1,常用的C++输入输出中,cin/cout(包括getline(cin,str)…)>scanf/printf>getchar()/putchar();使用这种方法,在数据量较大时(百万次运算以上),能有较大的优化,cin、cout比scanf和printf慢了几百ms甚至上千ms,原因在于cin和cout要时刻和stdin和stdout同步,即和printf,scanf同步,因此
有一定的开销,此时,可以调用ios::sync_with_stdio(false);来取消二者的同步,此时可能会导致出错,但cin和cout的效率就升高了。getchar和putchar效率比较高的原因是一次仅仅对一个字符进行处理。而printf和scanf中的“%d”等字符串的匹配和识别也有一定的开销,会导致其速度比较慢。因此,如果希望有高效的输入输出,就使用getchar和putchar。
2.常用的一些类和模板也有一定的缺点,譬如,在使用string时,它的内存会占用更多,同时,如果要调用length等函数,也会有很大的开销。因此,能使用char就不使用string,能使用数组,就不使用vector。同时,在对函数传参时,可以传入一个char的元素,但是在函数中的形参以string形式出现,这样,仅仅在该函数中,char*保留有string的特性。
3,在使用new时,消耗的时间是使用创建数组的100倍,因此,在需要创建链表等的时候,可以先创建一个数组,每次需要new时就直接从数组里面取地址。
4. 对于动态规划,如果后一行可以由前一行和该行得出,那么可以使用只有两行的数组,来储存动态规划的结果。
5. 对于链表,有时也可以使用数组对其进行模拟,但是,是用这种方式的速度可能没有原来那么快,因为指针更底层,通过指针引用来获取数据更快。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值