zoukankan      html  css  js  c++  java
  • 经验积累

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

    能用邻接表不用邻接矩阵

    别交错程序

    最后,不要颓废。

  • 相关阅读:
    vue组件通信类型限制
    vue父子组件通信
    vue组件data必须是函数
    vue组件模块抽离
    vue局部组件语法糖
    leetcode刷题-47全排列2
    leetcode刷题-46全排列
    leetcode刷题-43字符串相乘
    leetcode刷题-40组合总和2
    leetcode刷题-39组合总和
  • 原文地址:https://www.cnblogs.com/hzoi-yzh/p/11557618.html
Copyright © 2011-2022 走看看