经验积累

开考首先看下封面上各题的空间时间,开不开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)说明有重边

能用邻接表不用邻接矩阵

别交错程序

最后,不要颓废。

原文地址:https://www.cnblogs.com/hzoi-yzh/p/11557618.html