坑点总结

如果之前对这些坑点多注意一下,也不至于省选的时候挂掉那么多分数QAQ

考试策略

不要有"这题过了大样例我稳了"的想法然后不仔细检查某道题...(省选Day2T2的惨烈滚粗)
题面,输入输出格式,数据范围都要反复读.重要条件可能在任何地方.(省选day1T3的"r<k")
开考之后先建好三道题的文件夹,让自己对文件名有个印象.不要把题目里出现多次的单词当作文件名.(2017.4.27校内考试,从文件夹名到.cpp的文件名到freopen里全打错了,炸掉100分)
多组数据的题,在不超时的情况下尽量把数组都清空.有的数组感觉上不清空没事,但是写着写着可能就出事了.(2017.4.27校内考试,某道大暴力的标记数组未清空,炸掉10分)

输出格式

注意输出的数字之间用空格隔开输出在一行还是回车隔开输出多行.(bzoj 3473 字符串)
注意输出的结果是否要乘上2的幂/阶乘....(省选Day2T2的惨烈滚粗)

数据类型

凡是要取模的题,每步取模.每有一步减法,必须加上模数防止炸负数.
对于输入是整数且范围较大的计算几何,使用long long避免炸精度.输出的时候不要转double,要printf("%lld.%lld\n",ans/2,(ans&1)5);
对于某些中间结果非常大但不会在答案中出现的题,可以用long double计算中间答案最后用long long输出(HEOI2017 期末考试)
如果某道题答案是非负的,同时写法被卡内存导致开不了long long但答案可能炸int,可以考虑使用unsigned int争取更高分数.(某道奇怪的考试题,大力写了一个非正解的状压DP,因为卡内存没用long long只开了int,后来发现unsigned int 可过)
注意"0"在数据范围里的存在
不要"int a=b
1llc",需要int a=b1llc%mod....(雅礼集训某题)
a
b和a1llb....(模拟赛某题)
大小级别1e9的数字进行运算时,加减操作多进行几次也可以炸int(bzoj2146 Construst 算周长的时候)

常数优化

如果程序运行过慢,应当想到不是常数问题,很可能渐进复杂度是错的,需要检查一遍代码有无错误.(省选Day1T2的滚粗)
std::min(),std::max()比较慢,可以用inline void gmin(int &a,int b){if(b<a)a=b;}这样的函数取代.(Bestcoder的一道DP题,fst了)
fft把复数类的加减乘拆掉封装会快
有的带修改rmq可以用树状数组代替线段树(bzoj2248 挖油)

具体算法的易错点

线段树修改后一定要记得合并标记(省选Day1T2的滚粗)
点分治递归分治子树的时候要从子树重心开始分治而不是当前重心连向的子树中的点
AC自动机上"某些节点禁止经过"时,能够从fail指针跳到这些节点的节点也应当禁止通过.(bzoj3530,不知道我当时怎么过的...)
FFT的数值过大时(int)floor(a[i].x+0.5)会炸int,需要(long long)floor(a[i].x+0.5)

posted @ 2017-04-26 19:11  liu_runda  阅读(980)  评论(0编辑  收藏  举报
偶然想到可以用这样的字体藏一点想说的话,可是并没有什么想说的. 现在有了:文化课好难