zoukankan      html  css  js  c++  java
  • 被迫营业

    鸽巢原理

    利用鸽巢原理做构造:CF618F AGC025D ...

    二项式定理

    一些二项式的常用式子

    二项式定理: ((x+y)^k=sumlimits_{i=0}^kdbinom{k}{i}x^iy^{k-i})

    加法递推: (dbinom{n}{m}=dbinom{n-1}{m}+dbinom{n-1}{m-1})

    *行求和法: $sumlimits_{i=0}^ndbinom{r+i}{i}=dbinom{r+n+1}{n} $

    上指标求和(也能做二维的) : (sumlimits_{i=0}^ndbinom{i}{m}=dbinom{n+1}{m+1})

    (dbinom{n+m}{k}=sumlimits_{i=0}^kdbinom{n}{i}dbinom{m}{k-i})

    容斥原理

    处理 (gcd = x) 的式子,可以算出 (gcd)(x) 的倍数的贡献,再减去 (gcd =2x,3xdots) 的贡献。例子:CF839D 。

    处理 (gcd = 1) 可以莫比乌斯反演掉。例子:CF439E 。

    出现 “ 恰好为 x ”的条件可以容斥,同时也是二项式反演的本质。

    CF451E : 存在 (n) 种元素,求每种元素有 (f_i)
    个的可重集取出 (m) 个元素的方案数。

    解法:首先不管 (f_i) 的限制,可以隔板法插 (n-1) 块板得到答案 (inom{n+m-1}{n-1}) 。考虑减掉 (1) 号超过的,减掉 (2) 号超过的... 再加上 (1,2) 号超过的,加上 (1,3) 超过的... 对每种超过的情况容斥求出答案。

    卡特兰数

    通项公式: (dfrac{inom{2n}n}{n+1})

    递推: (c_n = sum_{i = 1}^{n}c_{i - 1}cdot c_{n - i})(n) 个节点的二叉树数量,[AHOI2012]树屋阶梯

    实际意义:

    ((0,0))((n,n)) ,每步只能向右或向上走一单位长度,不能越过第一象限角*分线的方案。

    远离角*分线看做 +1 ,靠*角*分线看做 -1 ,那就是摆放 (n) 个 +1 , (n) 个 -1 ,前缀和都要 (ge 0) 的方案数。(这就相当于出栈序列与括号序列)

    【NOI2018】冒泡排序

    打表观察,发现 (n) 长度的符合方案数为 (Catalan(n))

    并且有一个结论:排列符合的条件为 没有长度 (ge 3) 的下降子序列。

    如果前 (i)(max = j) ,第 (i+1) 位只能填 (>max) 或小于 (max) 且最小的数。

    由于字典序的限制,考虑 dp 计算,并且 dp 状态要尽量便于关于字典序的统计

    (f(i,j)) 为填了 (i) 个数,前 (i) 个的 (max = j) ,此时填 (i+1sim n) 的方案数。(为什么想到这样设?因为要让前面的符合字典序,统计后面的方案数)

    对于 (i<j)

    [f(i,j)=f(i+1,j)+sum_{k=j+1}^{n} f(i+1,k) ]

    (填一个最小的、一个更大的)

    且对于 (i=j) :下面没有更小的,只能填一个更大的

    [f(i,j)=sum_{k=j+1}^{n} f(i+1,k) ]

    对于 (i>j)(f(i,j)=0)

    整合一下:

    [f(i,j)=sum_{k=i}^{n} f(i+1,k) operatorname{and} {ile j} ]

    [f(n,n)=1 ]


    观察这个 dp 会发现 (f(i,j)) 的实际意义:

    在网格图上 ((i,j) o (n,n)) ,每一轮只能向上走若干步或 0 步,然后恰好向右走一步,要求一直在第一象限角*分线上方。

    如果没有字典序限制,就是从 ((0,0))((n,n)) ,就是 Catalan 数。

    现在要求 (f(i,j)) 就是 ((i,j) o (n,n)) 不碰到 (y=x-1) 的方案数,设 ((x,y))((i,j)) 关于 (y=x-1) 的对称点,相当于 ((i,j) o (n,n)) 随便走的方案 减去 ((x,y) o (n,n)) 随便走的方案。

    求出 (f(i,j)) 后 answer 容易计算,枚举前 (i) 个字典序与排列 (p) 相同,得出后面的方案数。


    高斯消元

    可以用于求解方程组,适用于有环的 DP 转移。

    当矩阵中元素不为 0 的较少时,可以进行更快的高斯消元。例如: CF24D

    线性代数-矩阵

    三角矩阵:①上三角矩阵 它的主对角线以下(不包括主对角线)的元素均为常数 0 。②下三角矩阵 它的主对角线上方均为常数 0 。

    对称矩阵:以主对角线为对称轴,各元素对应相等的矩阵。

    矩阵转置:把所有矩阵中元素的横纵坐标交换,得到的矩阵,记为 (A^T)

    行列式:

    [det A = sum_{P} (-1)^{pi(P)}prod A_{i,P(i)} ]

    其中 (P) 为一个排列, (pi(P)) 为排列逆序对数。

    性质:

    1. (det(A)=det(A^T))
    2. 交换 (A) 中的两行,得到 (B)(det(B)=-det(A))
    3. 行列式中某一行的元素都 ( imes k) ,行列式的值变为原来的 (k) 倍。
    4. 若矩阵中有两行相等,则 (det = 0) ; 行列式中两行对应成比例,则 (det =0)
    5. 行列式某一行乘以一个数然后加到另一行上, 行列式的值不变。

    根据第五和第二条性质,可以用高斯消元讲矩阵变为对角线矩阵,对角线矩阵的行列式为对角线乘积。

    线性基

    对于一组向量 (X_i)(X=sum a_i X_i) 得到的集合为这组向量张成的线性包。

    如果存在不全为 0 的 (a_i) 使得 (sum a_i X_i = 0) 那么就称 (X_i) 线性相关。

    如果 (X) 线性相关,那么至少有一个 (X_i) 是其他向量的线性组合。

    如果 (V) 是一个非零的线性包,而 (X_i) 线性无关且 (X) 张成的线性包为 (V) ,那么说 (X)(V) 的一个基。

    那么 (V) 中的任何元素都可以被表示为 (sum X_i a_i)

    异或线性基:对于整数的每一位看做一个维度,在集合 (A) 中,选出若干个数 (X_i) ,使得任取 (X_i) 异或不为 0 ,且任取 (X_i) 异或可以表示 (A) 中任何元素异或的结果,则 (X)(X) 的异或线性基。

    性质:(设异或线性基大小为 (cnt) ,集合 (A) 大小为 (n)

    将集合 (A) 任取元素异或出的 (2^{n}) 个数排在一起,则有 (2^{cnt}) 个不同的数,且出现次数均为 (2^{n-cnt})

    线性基的插入:一位位考虑,能插入则插入,否则异或上当前有的数。

    int a[32];
    inline bool ins(int x){
    	Rep(i,31,0)
    		if(x>>i&1){
    			if(a[i])x^=a[i];
    			else return a[i]=x,1;
    		}
    	return 0;
    }
    

    线性基求能异或出的最大值、最小值:从高到低贪心。

    inline int getmax(int x=0){
    	Rep(i,31,0)x=max(x,x^a[i]);
    	return x; 
    }
    

    【清华集训2014】玛里苟斯 :线性基 + 分类讨论。

    【集训队互测2015】最大异或和 :带删除线性基(保留所有的 0 环)。

    图上线性基:找出图上所有的环,将 xor 插入线性基。

    $$Huge ext{Goodbye OI}$$
  • 相关阅读:
    Nginx配置文件说明
    http服务区域组网的一种方法
    InetAddress.getLocalHost()返回ip 地址异常听问题
    #!/bin/bash(转)
    ThreadPoolExecutor运转机制详解(转)
    memcache 入门学习资料
    Too many open files 异常
    Java并发编程之ConcurrentHashMap
    Java NIO 选择器(Selector)的内部实现(poll epoll)
    Python 的sub和replace的区别
  • 原文地址:https://www.cnblogs.com/Rainbowsjy/p/14736573.html
Copyright © 2011-2022 走看看