• 坏习纠正


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

    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递归效率低,递归太深会报异常,尽可能减少递归使用或用循环代替

    后续更新。。

  • 相关阅读:
    Android调用浏览器打开网址遇到的问题
    TexturePacker压缩png的命令
    碎碎念
    推荐几款API文档集合工具
    XCode打包脚本
    Android手机提示“未安装应用程序”
    移动环境下DNS解析失败后的优化方案
    7z压缩与解压命令
    Lua的文件操作
    IOS判断用户的网络类型(2/3/4G、wifi)
  • 原文地址:https://www.cnblogs.com/yzm10/p/7402140.html
Copyright © 2020-2023  润新知