zoukankan      html  css  js  c++  java
  • 【给自己的一些话】

    (Talk is easy,show your code)

    (Think twice, code once)
    码力一定要提升,强迫自己写代码

    自信 自信 自信 自信 自信

    平衡树/线段树五问:
    1.每个节点需要记录那些信息
    2.需要那些标记
    3.下传标记怎么做
    4.区间整体修改怎么搞
    5.如何合并区间

    在图上遍历要写

    for(int i = head[u];i;i = e[i].next)
    

    (我被这个问题卡了好多次了,注意一点啊傻逼)

    遇到问题自己解决

    碰到类似于(2^n)的东西往二进制上靠

    注意数据范围,(long long)是否要开,数组是否够大

    斜率优化一般不用设初值,但如果有多层dp,建议跑第一层dp初值,单调队列(head < end),只要觉得自己柿子没推错,就相信自己。
    自信。

    P5504 [JSOI2011] 柠檬 还鸽着

    树状数组注意值域大小

    cdq分治注意左子区间,右子区间,本区间的更新顺序,考虑是否左子区间对右子区间造成的影响是否会影响右子区间本身的更新,如最优化问题

    遇到类似于一个点对一段区间有贡献的题目,往树上想。

    字典序最大的一类题目:
    正解则是考虑按位确定:考虑从 (1)(n) 依次确定该点选了哪个值,确定 i 这个位置的值时,我们选取满足以下条件的值:

    1. 使得这个东西确定之后,存在一种 (i+1)(n) 的分配方案,使得总方案合法。
    2. 尽可能大。

    快读时如果保证没有负数可以不写判负数的程序,能快不少。

    注意哪些地方要(ll),哪些地方不用,(int)(ll)速度差很多,常数差就在这里。

    考虑抽象模型。

    后缀和转化为全局减前缀。

    如果两个函数一个单调增,一个单调减,如果两个函数相交是理论最大值。
    但是由于两个函数是离散的,可以考虑这样一个东西。
    那么答案是如下两个(k)的最大值:
    (f_1(max(k)),f_1(k) < f_2(k))
    (f_1(min(k)),f_1(k) >= f_2(k))
    由于函数性质,所以可以进行二分。

    对于数据结构的合并,大概是暴力合并每个点?
    考虑把小的合并到大的来,进行一个启发式的合并

    如果有对于一个区间的操作,如果端点数较小,考虑离散完丢线段树上处理

    看到树上路径,考虑拆成(u->lca>v)两段处理。

    看到区间形式,考虑是否能够进行前缀消除转化为[1,l - 1],[1,r]的操作,如异或粽子

    low[u] == std::min(low[u],dfn[v]);这个是不会报错的

    (sum (n/i) = nlogn)有点蠢

    对于一些无法正面求解的问题或者条件,考虑正难则反。
    或者先对一些易满足的条件进行满足,在这个基础上进行调整。

    在构造时要对构造出来的系统保持清醒认识。
    在判负环时可以考虑牺牲一些正确性换取时间。

    做题时不要看标签,容易被带偏。

    不要写错东西,思路要清晰,过了样例并不能说明什么,一定要记得对拍

    (DS)题不要依赖板子,要自己写,包括各种图论树论数论的题,考场没有板子给你看。

    淀粉质的容斥不是必须的。

    要敢于写代码,不敢做就永远跨不出那一步,你明明能做的很好。

    圆方树记得不要退栈到(u)

    线段树记得返回值啊。

    数组A[N],下标只到N - 1,别被RE送回家

    考虑在进行权值整体偏移时要小心,交题不要选错语言。

    宏定义不要写错。

    if(),,,if();;;是不一样的,不要写错。

    scanf("%lld")scanf("%d")要注意数据类型。

    不要搞错各个函数,不要写错函数名。

    考虑在求树上所有点对的某个信息的并时候,可以考虑是否可以进行换根(dp),即对于点(x)为根时,求出(dis(x,i))的并。

    对于某些操作使答案变化的题,如果没法直接维护,可以思考是否有一些性质的操作能让答案变得更好。

    考虑(|a - b|)转变成((a,b))区间长度

    每次覆盖一行,或者一列的做法都考虑将行列抽象成点,操作位置抽象成边。

    数个区间求最长交集,考虑按(l)排序,维护最大的(r),考虑答案为(max(min(r,r_i) - l_i))

    指针移动完可以考虑再向两边扩展一下保证正确率,甚至可以让假做法过去。在明白有单调性但不是很清楚时可以用。
    指针移动要考虑移动的范围,不要出界。

    树上相同性质的一些答案,考虑树上(dp).

    在函数里定义变量记得赋值。

    数据量大就记得快读,最好养成大于(1e5)就快读的习惯。

    区间上的问题可以考虑是否能够分治来做。

    对于(n^3)复杂度的东西,矩阵,区间dp考虑一下。

    对于矩阵乘法,多次询问,单次是倍增做法的,可以考虑记录一下每个倍增点的矩阵,少个n。

    树的直径的一些性质:两颗树由一条边连在一块,则新树的直径,定为原两颗树的直径的两个端点取二。

    就是找一个最远点,让(dis(u,k))最长,在树上的话,我们知道这个点(k)是这颗树上直径的两端之一。

    注意全局变量和局部变量关系,不要在局部重复定义全局变量,会出错。

    阶梯(Nim)等同于在奇数位上的(Nim)游戏。

    考虑数满足某个条件子串的数量,可以从结尾统计

    int 和 ll 的常数差别

    int 和 ll 的MLE差别

    strlen是O(n)

    对于一类(max - min)的题目,可以考虑按权值排序后尺取。

    一个数在(fib)数系下有唯一分解定理。

    注意','和';'
    注意对拍

    注意tire树的空间。

    vector的下标注意事项

    对于子区间问题,可以离线下来逐次增加r。

    (a / b) + (a % b > 0)

    区间相交:(max(l1,l2) <= min(r1,r2))

    二进制子集信息统计:高维前缀和。

    树上差分要从子叶往上合并

    控制转移次数的最小可以每次减去一个INF

    不要把数组开在if里面,会RE

    如果修改操作会改变原数组,且对一个对象会有多次修改,记得把原对象也修改,而非只修改贡献。

    取模最好手动实现,因为直接取模真的很慢。

    众所周知sqrtsqrtsqrt是一个跑得极慢的函数

    所以我们可以两边平方消掉sqrtsqrtsqrt,最后再算一次即可

    方案数的次方,可以看做多个单独操作的合并

    2021-3-23 21:44 自己可能被卡住这轮省选了,离一等线就差2分。
    你妈的,为什么,你这么菜啊。


    努力一点

    2021-6-04 21:50
    或许你并不比别人差,你缺的是训练。
    所以请自信自信自信自信自信。

  • 相关阅读:
    第五章 Python——字符编码与文件处理
    第六章 Python——函数与面向过程编程
    第七章 Python——模块与包
    第一章 计算机硬件基础与操作系统介绍
    luogu P1706 全排列问题
    luogu 2142 高精度减法
    luogu P1601 高精度加法
    luogu P1803 线段覆盖 贪心
    luogu P1031 均分纸牌 贪心
    luogu P2678 跳石头 二分答案
  • 原文地址:https://www.cnblogs.com/dixiao/p/14571155.html
Copyright © 2011-2022 走看看