OJ技巧(不断扩充)

​​​​​​OJ代码技巧:

  • map在计数的时候很好用:

                    (1)因为是键值对,所以不会有重复的键,重复输入的话会更新值。(即map.size()就是键的种类数)

                    (2)按照键的大小,会自动排序,所以不用sort函数

                    (3)->first: 键   ->second: 相同的键的个数

                     (4)it:  map<int,int>:: iterator it=map.begin()  (遍历用)

  • node也是一个数据类型,坐标时可以方便使用
  • ceil,floor是math里的函数,即向上向下取整
  • 养成良好的编程习惯:虽然OJ没必要,但是最好写成输入然后接口调用专门函数。
  • 用字符串处理大数问题常配合int计算,只要-‘0’即可
  • stl:list的用法就是链表。构造函数同vector,有push_back(),pop_front(),front,back,begin(),end(),merge()等,注意不能使用下标访问。循环用iterator。用这个要比自己写链表快多了,而且不容易出错!!!
  • 断点调试:意义就在于——找到出错的代码
  • !!!坚信——对于程序,只要你不懒,总能查出来,写出来,调试出来。问题就在于时间。而这个是是随着你的见多识广,调试的经验而减小的。
  • algorithm自带sort,对vector—参数一:.begin()参数二: .begin()+.size() 参数三:comp—bool comp(int i,int j){ return (i<j) }  
  • 将string转为int:   atoi(string.c_str())——即先转为字符串,然后由字符串转为int
  • 2^31即为int型的大小

OJ算法技巧:

  • dp套路:数组+循环
  • dp的坑:如果数组多了一行一列,在结合input实现表达式的时候一定要注意,下标不要出错。
  • dp的坑:dp循环上三角的题,第一层递增的量,第二层是起始点,那么第二层循环的约束条件要注意。
  • dp0-1背包的题面套路:给出一组元素,看是否能组成特定要求的,或者看能组成的数量。
  • 回文序列:注意处理单个和两个的特殊情况。
  • 模板:假如每个主题有大约5个模板,有十个主题就有50个模板。模板本身就已经够多的了,如果只是死记硬背不知变通,那。。。而且OJ本身就是一个要求全面的东西,谁也不能要求自己一蹴而就。首先应该实现主要功能,如果有过不去的样例,再仔细思考加一些语句试试。
  • 数学:乘法运算过程——两层循环(从最低位),low:新乘积加原来的,末位low%,倒数第二位:原本+low/10
  • 归并:两个都while循环,单个就循环后直接接上。

 

OJ AC技巧:

  • WA:输出没问题,特别样例暂时想不出。那么,一定要从问题本身出发,也许你想到的办法只能解决样例。(非常重要!!!)

  • WA:处理特殊样例的时候,有没有同步输出?有些输出需要变量加加减减挺复杂的,所以特殊样例的时候是不是忘了处理。

  • RunTimeError:数组越界的一种情况。输入是字符串,但是没考虑特殊样例“”,访问不到自然越界了。

  • TimeLimitExceeded: 某些样例没过。在求Tribonacci的时候时间超限了。解决:如果递归上限小的话,递归可以转为数组。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值