[总结][待更新]各种错误

1.多组数据

(1)没有清空,或把实际需要清空的当成不需要清空

①图论f1数组

②线段树的标记

③各种数据结构要消去内存占用

④各种单组数据的时候,因为默认是空的,所以没有初始化的东西

一定要极其仔细!错了不知道多少次了!!!

(2)某组数据中少读入了一些数据

①判-1之类的东西时,直接跳出循环,没有把剩下数据读完

2.读入

(1)读入数据范围接近上限,于是运算过程中超限

(2)scanf时,double用%lf,float用%f

    https://zh.cppreference.com/w/cpp/language/variadic_arguments

    调用变参函数时,进行左值到右值、数组到指针及函数到指针转换后,可变实参列表中的每个实参都要经过称为默认实参提升的额外转换:

        转换 std::nullptr_t 到 void*
        转换 floatdouble,如同浮点提升
        转换 boolcharshort 及无作用域枚举到 int 或更宽的整数类型,如同整型提升 
View Code

(printf时,即使参数float,传过去的也是double)printf时,double和float都用%f,c++11/c99后也可用%lf(好像devc++自带的那个gcc/g++即使指定老标准用%lf实际上也没有问题啊)

long double不管scanf还是printf都是%Lf,但是实际输入输出中有某种问题,尽量少用(不清楚)

(3)ios::sync_with_stdio(0)尽量不要用,好像会有概率(玄学?)出问题——已知问题是开启后cin/cout不能和scanf/printf一起使用,但似乎遇到过其他问题?

3.排序

(1)排序某一组数据后,忽略了这组数据的编号已经失去意义,与其他没有排序的数据结合使用

①(kdtree) 用了nth_element/sort等,又要求输出编号时,要注意

4.STL

(1)设it是一个p类型对象的迭代器,并不能用it==(任意一个p类型对象).end()来判断迭代器是否失效

5.取模

(1)快速幂的时候,显然指数不能直接对模数取模

6.数据范围

(1)(看错数据范围等原因导致)没有开longlong

(2)inf不够大或者-inf不够小

①在将int改为longlong后没有对应将inf从0x3f3f3f3f改为0x3f3f3f3f3f3f3f3f

7.对拍

(1)python高维数组不能用a=[[]]*10000,要用a=[[] for i in range(10000)](不然在a[0]里面append元素,a[1],a[2],a[3],..里面都会有)

8.c++

(1)貌似有些编译器上使用某些未初始化变量也不会有提示,还是要自己仔细查一下

(2)不能为了省事而不同作用变量用同一个变量名,容易出事

9.强制在线

(1)忘了做那些异或之类的操作(然而却很容易过样例,对拍时候也容易忘,要小心)

(2)忘了给lastans赋值(注意因为在做某些特判而有多个可能输出的位置的时候)


1.图

(1)有向图判环,自环一定要特判!(不能直接用强连通)

2.线段树

(1)数组模拟指针时,节点编号(num)与区间端点(l)搞混

3.并查集

(1)带撤销并查集,少备份/还原了东西

4.细节

(1)内外层循环误用相同循环变量

(2)对于一类依赖某种分类方式来达到根号复杂度的方法(比如多字符串,暴力求某些东西,复杂度带的根号),很可能需要去重(不然被卡到$n^2$)

(3)交程序前一定要记得看一下是否有可能要求手动加上头文件的函数(比如abs,sqrt,没有cmath的话有时候本机AC提交CE),还有C++11记得去掉

(4)逆元的坑:模数不是质数,一般肯定不会用...

即使模数已经是质数了,逆元也不是随便用的

如果涉及到的要求逆元的数大于等于模数,在某些情况下(忘了哪些情况了),要在求逆元前先取模;

如果涉及到的要求逆元的数大于等于模数,且是模数倍数,那么逆元就不能用了(想想看,如果c=a*(kp)%p,在已知(kp)和c的情况下,显然不能反推出a),尝试先模原模数的一个倍数使得模数达到足够大,输出的时候再对原模数取模(应该是不行的,因为这样的话模数不是质数);尝试用各种特殊方法化简吧(比如这个公式:a/b%c=a%(b*c)/b)。。。

(想一想可以知道,阶乘逆元/p^k倒是一般都不要紧。。因为要求的n!和p^k,一般n,p都分别小于模数,那么n!和p^k也不可能是模数的倍数(当然要求模数是质数);不过还是要注意)

(5)对于某些求最优化,有多个关键字的问题,最好不要用pair简化程序,应当手工定义结构体,手工定义比较函数,否则很容易由于pair默认的比较方式而出错

(6)n,m之类的搞混

(7)题面很绕,各种搞混

5.平衡树

(1)(主要是LCT)取左/右子节点时没有考虑节点上的reverse_tag

6.字符串

(1)不等长的串s1,s2满足(按字典序)s1<s2,在s1,s2后分别加入一个字符后不一定仍然满足

(于是后缀平衡树不能在尾部加入字符)

7.树上的数据结构

(1)树剖求重儿子不需要sz[0]=0x3f3f3f3f,点分求重心要

(2)树剖+线段树,线段树记得判当L>R时互换L,R

8.数学

(1)等比数列(n^1+n^2+n^3+...)一类的求和要特判n=1!

9,dp

(1)发现dp题数据范围小又搞不出来一定要特意想一想区间dp是否可做


做题

1.算错复杂度(因为根本没有仔细算),以为是正解,码很久结果既没有分又把时间用掉了

2. 离线后打乱询问的题目,记得输出时候还原为输入顺序

posted @ 2018-07-28 17:49  hehe_54321  阅读(234)  评论(0编辑  收藏  举报
AmazingCounters.com