开考首先看下封面上各题的空间时间,开不开O2,有没有特殊说明 用不了多少时间但很有必要。
之后过遍题面,估计下难度、思考方向,决定开题顺序
优先级:
1.裸题
2.简单题
3.之后大概按题目顺序
对于一道题:有高分普适暴力先打(特殊高分也可打),打的时候看能否优化,正解10min无思路跳下一题,有思路就实现,然后开拍进下一题。
如此三道题差不多能在比较短的时间内拿到保底分而且留有余地。
然后再按思考深度进题,实在没思路且没时间,打特殊部分分,对于不能处理的大数据范围,随机化 乱搞。
红字能够避免押宝、心态爆炸。想不出正解,我有暴力分。想的出,我马上就可以打拍,即使先打正解,我也照样要打暴力对拍。如此稳赚不亏。
ps:前段时间押宝亏大了长记性。
10.5受挫我又来补充了。。。
不要被同桌带节奏,心态稳住,按照自己的节奏,遵照上面所说的。
记得测试极限数据,防止RE TLE,同时size测一下,防止MLE
如果有操作只会更优,最好打上
最后十分钟检查:
1.freopen fclose
2.数组大小
3.long long
4.输出格式(换行、空格、SPJ格式、保留小数)
5.是否交对程序
6.c++11
思考方向:
比较像是dp的题:
首先考虑dp,看能不能设出合法状态,列转移方程,如果复杂度能拿到一定的部分分就先打。打完记得观察式子,看能不能优化(前缀和,数据结构...)
如果dp状态数太多或者非常不好列状态,考虑贪心,如要反悔考虑堆和网络流。
最优化问题可试一下能不能套最短路
有时候结合个网格图会写成拓扑排序,其实本质就是dp,然而拓扑不能优化。
复杂度过高,dp类似用n+m个权值不同且n和m分别有数量限制的物品填背包还有特殊限制(有x个在mst,同一物品在不同回合权值不同),考虑wqs二分。 这个太抽象,胡了
状压dp要考虑转移复杂度
图论:
纯图论->结合考点(拓扑排序,连通分量...双连通,割点,割边性质...)
基环树拆环成树 dp
概率期望:
概率正推,期望逆推
有后效性,先列高斯消元,复杂度炸看能不能推出转移系数(单层转移,每个状态只由一个变量转移,只在两侧成环)。
《记忆的轮廓》《树》这种树上瞎走题,归无序到有序,求出一个点向上向下走移动一步的期望,然后倍增处理所有移动。
概率转移要包含所有可能的情况《山屋惊魂》、《Cicada 与排序》
数论:
提出gcd,转化互质,判定范围,求出变元个数,注意重复。例子《神炎皇》模拟67、《木板》模拟70
[1,n]有n/i个数能被i整除
一些技巧:
1.能离线先考虑离线,询问排序批次处理
2.[l,r]询问不好处理,看有无前缀可减的性质,转化为两个[1,x]的前缀询问。(数位DP,《LCA》)
3.单调栈尝试处理最值相关问题。
转换后的经典模型:
判线段完全覆盖:
小值域差分数组
大值域线段以左端点sort,贪心取max,看是否存在一个时刻max<l-1
求最大的区间和点的匹配(区间包含点,且只能两两匹配)
暴力:跑匈牙利最大匹配$nm$,dinic似乎是$m sqrt{n}$?
贪心:sort点,扫的过程中加入(set、堆)越过左端点的区间,在合法中贪心匹配右端点最左的。
最小点覆盖
非树下是NP完全问题
树,设dp[u][0/1]为u选或不选,然后转移即可
约瑟夫问题:
n个人,每次m步,求最后赢家
倒推式子,结论 for i 2->n ans=(ans+m)%i
ans=ans+1
当m很小,n很大的时候可以优化(跳过等差数列)。
无环图中,点数-边数=连通块数
数据结构:
线段树:
1.区间加减 max min 异或
区间异或+查和,每个节点维护位桶(区间内该位为1的值的个数)
2.最大连续x区间及位置
3.以时间为下标维护操作,支持logn更改某个操作并得到更改后最后的结果
4.区间操作,查询一个点上拥有的操作。
做法:把区间操作拍在序列线段树上,到L<=l&&r<=R就加到这个节点上,单点查的时候累计所有路径区间答案。
同样可视为分治树。
5.优化建图:对于区间加边的题。
spe权值线段树:
1.前驱后继、rank、kth。见模拟68
主席树(可持久化权值线段树):
区间某答案
树上按深度建主席树,支持快速查询某个子树d深度答案
支持树链上建主席树+lca合并信息。
区间前驱后继、rank、kth。
可持久化Trie:
区间异或最大值(r版本,找>=l标记)
链表:
O(1)插入删除,O(n)查找。有单调性可以二分优化查找为O(logn)
减少枚举量
优化暴力,骗分
查找多次给定数的(前趋)^x和(后继)^x,互不相同序列保证复杂度。
LCT:
1.动态树,维护连通性,维护链上信息。
2.可改点,不能改“指标”
---摘自「Freopen」的原创文章
树状数组能干的事:
1:快速简洁求解前缀最值
2:快速简洁求解前缀和,单点修改区间和,区间修改单点值。
3:并不简洁的求解区间修改区间求和(但也比线段树简洁)
4:快速维护树上每个点到根的路径权值和
5:快速维护树上每个点的子树和(与4不兼容)
6:用来轻松愉快的套主席树,Splay等各类动态数据结构
7:维护带删除插入操作的排名,不过需要二分,两个log不推荐,推荐线段树一个log
并查集:
维护相等关系
按秩合并:把大的接到小的后边,撤销操作见模拟58的Dash Speed
性质
1.对于和一定的一个集合,集合中不同的数的个数不超过$sqrt{n}$
杂项
提示点:
图上n==m 基环树
i和[1,i-1]有关系 树型
最小值最大,最大值最小 二分
复杂度:
n=
10 $n!$ 状压
20 $2^n$
30~40 $2^{frac{n}{2}}$ Meet In The Middle
100 $n^3$ 、 $n^3logm$(矩阵快速幂,m=1e18)
1000~5000 $n^2$ 、 $n^2logn$
1e5 $nlogn$ 、 $nlog^2n$ $nsqrt{n}$(极限,估计要开2s)
1e12 1e14 $sqrt{n}$
数值:
5e7 1s稳过
1e8 小常数1s可过
常见处理:
1.区间加减、异或最后查询 差分数组|||在线修改查询 树状数组
2.维护带绝对值的最值 拆,维护四个
3.求字典序第k小 26进制下的k-1
4.平均值相关 减去平均值,之后前缀和等操作,一般要二分平均值
5.异或相关 按位维护
6.数组下标与值的含义互换 常见于大费用小权值背包dp
7.什么先于什么,求最优 拓扑+贪心(堆实现)
注意字典序最小!=小的数优先最靠前
前者直接小根堆跑拓扑,后者大根堆求字典序最大再反过来(原理?有时间再细想想)。
骚操作
见小限制输入,可打表。
分块打表:把答案分块,对大块打表,使不足一块的部分的复杂度合法。同时也保证了表不会很大。
NP完全问题
哈密尔顿回路
最小点覆盖
DAG求拓扑数
yeshi错误:
快速幂注意边界,注意乘爆,先取模。
n*(n-1)说明有重边
能用邻接表不用邻接矩阵
别交错程序
最后,不要颓废。