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

    后续更新。。

  • 相关阅读:
    Educational Codeforces Round 72 (Rated for Div. 2)
    2249: Altruistic Amphibians 01背包
    lh的简单图论
    E. XOR Guessing 交互题 Educational Codeforces Round 71 (Rated for Div. 2)
    C. Helga Hufflepuff's Cup 树形dp 难
    B. Marvolo Gaunt's Ring 前缀后缀
    android学习-IPC机制之ACtivity绑定Service通信
    大数组分时加载算法 timedChunk
    log4j 配置和使用
    fastjson 配置和使用
  • 原文地址:https://www.cnblogs.com/yzm10/p/7402140.html
Copyright © 2011-2022 走看看