zoukankan      html  css  js  c++  java
  • 坏习纠正

    在刷题中遇到的许多低级、隐蔽而又致命的错误,在此整理,谨此改正。

    1.库函数的使用:

    之前做过许多题,一直没有发现这个致命错误,导致许多题目低效率通过(最坏甚至不能AC)。

    如strlen(s)函数计算字符串长度,其本身就含有O(n)复杂度,在做许多题目时,为了方便我直接把函数放在for循环里用,就变成了O(n^2),导致程序效率极低。终于在一次TLE教训后经学长指正发现。

    错误:for(i=0;i<strlen(s);i++)

    改正:len=strlen(s);

               for(i=0;i<len;i++)

    经过了这次教训,我还想起来了之前百度之星某题用到过的sqrt函数。当时把sqrt放在循环里,效率低不说甚至WA。后来更正写法后,奇迹般地AC。

    错误:for(i=2;i<=sqrt(n-1);i++)

    改正:sq=sqrt(n-1);

               for(i=2;i<=sq;i++)

    2.校赛发现的坑点,32位环境溢出。int整型运算结果如果超出int范围,可能会报错。所以int参与的计算应避免超出int范围,或者统一设置成long long类型。(凡是有 long long参与的比较或运算,最好统一long long单位)

    printf("%lld",100000*100000);

    显示的并非正确结果。同样

    错误:for(int i=1;i*i<=10000000000;i++)    //10^10

    改正:for(long long i=1;i*i<=10000000000;i++)

    3.多校发现的巨坑。。数组下标越界。在编译器正常跑(强大容错),但评测机遇到越界就停止,输出不全造成WA。结果就一直怀疑思路的错误,越走越远。。

    一定注意边界条件的处理。

    4.codeforces教训。尽可能用多组输入,避免题目没明确要求。

    5.codeforces教训。题目给出T>=1(没给出上界),n的和不超过10^6。在每组T中,尽可能跑n遍,不要把整个数组扫一遍,否则TLE。(另memset实现比直接扫快一点

    6.HDU多校发现的玄学。HDU 6415dp时多维数组的状态要与多重循环的顺序保持一致,否则T...

    7.网络赛没思路也要暴力一发,说不定就过了。。(数据大水)

    8.set,pair等都可用map替代。pair一般不要使用,效率极低。

    9.Java递归效率低,递归太深会报异常,尽可能减少递归使用或用循环代替

    后续更新。。

  • 相关阅读:
    个人冲刺二(7)
    个人冲刺二(6)
    个人冲刺二(5)
    个人冲刺二(4)
    对称二叉树 · symmetric binary tree
    108 Convert Sorted Array to Binary Search Tree数组变成高度平衡的二叉树
    530.Minimum Absolute Difference in BST 二叉搜索树中的最小差的绝对值
    pp 集成工程师 mism师兄问一问
    17. Merge Two Binary Trees 融合二叉树
    270. Closest Binary Search Tree Value 二叉搜索树中,距离目标值最近的节点
  • 原文地址:https://www.cnblogs.com/yzm10/p/7402140.html
Copyright © 2011-2022 走看看