zoukankan      html  css  js  c++  java
  • 常见错误整理

    常见错误整理

      以前一直不想整理常见错误,总是觉得到正式考试自然就改过来了,但是事实好像并不是这样的,所以就整理一下吧。我初中的生物老师说过:大家总是觉得犯过的错不会再犯,事实上却总是在一个地方反复的犯错。这是因为你之所以犯错,很可能说明这里对你来说就是比较困难,就是容易想不清楚。我觉得还是很有道理的。 


    1. 没有spj,而且还要输出实数时,不要忘了判 $-0.0000001$ 这种东西,改成正的 $0$

    2. 点分治时,更新最大子树大小是 

    而不是

    如果写成这样,那复杂度就看运气了。

    3. 线性基插入时,位数一定一定要包括0,因为是 $(1<<i)$ ,如果不循环 $0$ 的话就会少了 $2^0=1$ 这个数字了。写线性基时可以试试这组数据:$1$ $2$ 如果写挂了就会只插入 $2$.

    4. 如果是对于线段进行离散化,最差情况下可能任意两端点不重合,所以数组就要开到线段数的二倍。如果是线段树的话就要开八倍。

    5. 不要写错文件名!包括输入输出的文件名和提交文件的文件名 !!!!!!!!!!!

    6.Dinic合集:

      bfs时,不要忘了vis[s]=true;小数据有时候还看不出来,但是数据大起来后就会TLE.

      如果bfs里面已经写了cur优化,不要...忘了用...还有就是要加取地址符。

    7.二分图判定:要么就黑白染色,要么就判奇环,不要自己YY一些似对非对的算法来用!这一条适用于所有算法。

    8.做题顺序:先看一遍题 $ ightarrow$ 可以秒掉的部分分 $ ightarrow$ 对拍(最暴力的对拍!) $ ightarrow$ 想一想各个题的做法 $ ightarrow$ 看起来好做一点的题 $ ightarrow$ ...

    这个顺序正在试用中...这段时间的考试都会采用这样的方法。因为肝高分题目肝到最后时刻才发现有暴力分没写/有简单题没开/简单题写挂是一件很郁闷的事情,而且大多数情况下...这个高分题目也是很难调出来的。

    9.最近真是奇怪错误频出啊...快读,不要忘了处理负数!初始化时,$x=0$,$f=1$ !

    10.如果是稍微复杂一点的推式子题目,先在纸上写好,不要再动这一部分,等程序写完的时候再对一对看看有没有抄错;

    11.只要涉及乘法取模,就需要注意两个乘数乘起来还没有取模的时候会不会爆掉,如果不能保证就快速乘。特别是注意会不会爆longlong。

    12.一个比较少见的错误,估计以后不会遇到了,但还是记下来:数位dp有时有多个状态:方案数,所有方案的和等等。这时,常用的“方案数为0就跳出循环”就不能用了,因为方案数看起来是0,但可能只是恰好为模数的倍数,这时的方案值的和不一定是0。这个错误说出来显得很简单,但是挺难发现。

    13.对于一些虚树的题目:原树没有边权,或都为一,所以暴力做的时候可以不考虑;但建成虚树后,因为有的边被压缩了,所以可能会出现边权,不要忘掉了。

    14.论如何枚举每个数的约数:

    虽然 $1-n$ 所有数的约数总个数是 $NlogN$ 级别的,但是如果枚举得不好,就退化成 $Nsqrt{N}$ 了。

    错误示范:复杂度 $O(Nsqrt{N})$

    正确做法:复杂度 $O(NlogN)$

     

    15.多组数据的时候,尽量不要用类似于“dep[j]==0”表示 $j$ 这个点没有访问过,如果确实要用,一定要清空所有这类的数组!!这种题如果要对拍,不要怕麻烦只拍单组数据...

    16.LCT中,如果要修改一整棵Splay的信息,不要随便找到一个点就改,要先 $findroot$ 一下;

    17.做图论题的时候,看清楚是有向图还是无向图!

    18.dij的vis数组表示有没有作为过堆顶,而spfa的vis数组表示的是现在是否在队列里;

    19.ST表的小优化:把 $st[100000][20]$ 换成 $st[20][100000]$ 可以有效提高速度;

    20.打板子ing,结果打一个错一个是什么鬼?线性基里有这么一个判断(x的第i位是否为1),不要忘了给 1 开longlong!好像说的不大清楚?像这样:  

    21.写完程序好好读一读,看看是不是自己想写的那个样子;manacher中注意两点:

      将原字符串分散时,要倒着循环,否则就覆盖了:

      

      还有这句话,似乎每一处都有可能出错,一定要认真检查或者对拍(反正找回文串的暴力很好写),尤其要注意取min的第一项到底是 $j$ 减去谁:

      

      

    22.又是多组数据,好像也没法概括了,仔细描述一下吧 QwQ:清空数组时,仅清空了[1][1]到[n][m],但是,这道题的不合法状态是用m+1来表示的!这样对于单组数据并没有问题,但是多组数据时就会错了。因为在上一组数据里[n][m+1]可能是合法的,这次就会访问到一些本不该访问到的量了。

    23.不要访问非法的区域!即使那个区域看起来好像访问了也是空的,但是很可能之前的某次是在里面填过数据的。访问前判断一下是否可以访问,不行就退出;

    比如说:单调队列的队首,在队列为空的时候不能访问;查询最小/最大值时,空的地方不能访问。

    24.Tarjan:

      缩点:弹栈时不要忘了清空vis数组;

      割点:

      

      这句话只有在“id[j]==0”的情况下才能用,毕竟你不能用子树外的点来判断自己是不是割点qwq

    25.zz错误:写了快读忘了用...

    26.线段树合并只有将询问离线后才可以直接用“覆盖式合并”,否则,合并时必须新开节点;

    27.SAM数组开两倍...

    28.CDQ中排序比较多,注意是给谁排序,是按照什么排序。另外要注意的就是如果有重复元素,必须压到一起做才行,去重时也要注意:是对读入的数排序而不是对新数组排序;

    29.最近犯的错误真的是越来越傻了;要取模的题目,别忘了取模...update的时候,不要忘了取模...

    30.fft做快速幂时,每次要将虚部清零,否则精度会炸;

    31.没事不要压行,没有任何意义。压行之后看起来也比较费劲,而且...即使再不压行,也不可能超过100kb对吧...

    32.注意:不要让数组越界,尤其是越到小于0的位置!

  • 相关阅读:
    Atitit.Java exe bat  作为windows系统服务程序运行
    Atitit. Object-c语言 的新的特性  attilax总结
    Atitit. Object-c语言 的新的特性  attilax总结
    Atitit。Time base gc 垃圾 资源 收集的原理与设计
    Atitit。Time base gc 垃圾 资源 收集的原理与设计
    Atitit.go语言golang语言的新的特性  attilax总结
    Atitit.go语言golang语言的新的特性  attilax总结
    Atitit.pdf 预览 转换html attilax总结
    Atitit.pdf 预览 转换html attilax总结
    Atitit.office word  excel  ppt pdf 的web在线预览方案与html转换方案 attilax 总结
  • 原文地址:https://www.cnblogs.com/shzr/p/10554004.html
Copyright © 2011-2022 走看看