时间分配:第三题说不定比第二题更简单。拿好暴力。
题目筛选:不要让会做的题目炸掉,细节特别多,自己yy的干脆不要写了,不要自己去做不熟悉的事情。
新题思路
读题一定要正确,易错的标出来,建议手玩一组数据。最后想好了(OPP)每一步,考虑好哪些要离散化等。既然OP,那么考虑好每一步干什么。想好了之后可以考虑重复的代码,把这些封装起来,想好每一个函数。
根据复杂度判断,平方就不用一直想预处理了,甚至可以暴力做询问。
遇见与平常类似的题目,通常只是先去掉限制,然后在关键步骤多一点而已。有额外的限制条件经常先删掉,然后在关键时候注意一下下就好。
适当贪心,强行规定一定没有错。先排个序(升序或者降序随便,考虑贪心。无脑时间反复重复就倍增,空间上排序后二分。
手玩会有很多思路,二分,倍增,dp,贪心,排序等。手动模拟,发现重叠子问题,且(值得记录下来的)子问题描述很简单,这样可以dp,有些很难。那么dp不如暴力。修改dp描述,以其结尾,差分,决策单调性等。如果你发现考场上没有方程只有模糊的数据结构或者奇淫技巧那么这个思路就不对。
末态确定,根据结果想方案,建反图,从后向前搜索etc
二分答案转判定,减少一个条件但是只多一个log
差分的思想维护,dp,数据结构,相减。或者两边同时来,dfs序
简化问题(等价,可行是因为构造出来了一种算法或者是数学归纳法从后向前
两维,种的如果少那么就是分类讨论的。
要不试试dfs序和询问离线?
输入很少?打表出奇迹
数据压缩是一件好事情,利用相对大小的不便性。整体偏移,消除前缀和的影响。
考虑初态和影响;考虑操作主动去影响询问。不变考虑变,一对多
区间一定考虑前缀和和差分。然而差分与偏移无关。
实在想不出来就暴力,不要一直在一道题目上思考。细节太多或者yy的一定是思路大方向错了
不同类型的题目
树的操作
画树就是一棵树!
图论
考虑一棵树,如dfs树。点双?是不是之前学过?
dij和kru考的很多。dij多源最短路,记录最后扫描色块横切边。kru类似的思想改一点点。
建图特别重要,特别是一些好算法。尽量不要自己发明算法,而是通过改变数据来适应算法。比如最短路迪杰斯特拉的奇葩路径计算方式的灵活运用,线段树把一个区间的定点包括在一起(内存换时间,内存很大)。
基环树也是先考虑树然后在强行修改。
DP
一定要确定有最优子结构性质,不要瞎转移。yy的没有方程的转移,数据少的一定是错的。
先排除一些不可能的选项以满足最优子结构性质。
考虑以i结尾。
状态设计冗余,考虑有没有等效替代的方案,如果有那么就不用考虑,因为一定已经被算过了。或者强行制定状态转移顺序,不过代价一定在这之前。
打表优化决策点
暴搜
剪枝,相信玄学复杂度
非树形状态转移可考虑记忆化
知识点残缺
数学基础,逆元
数位 计数dp
权值线段树合并,树剖,倍增优化。
查找 hashtable
零碎知识点
单峰函数的证明可以用斜率的变化
点双 fsyctc
拓扑自环 spfa负 基环树 找环 分块 线段树优化建图