有耐心,慢慢地思考,切勿急噪。沉着,冷静,大胆,心细。考出自己的水平。
1. 数组范围开大一点点
2. 用if 判断 比 过程快
3. 数组记得fillchar
4. 想清楚算法 仔细对拍 将已想好的算法准确地用程序体现
5. 仔细看清楚题目 不要忽视一些细小的地方
6. 反复想 想不出 回头看题目 是否漏了细节
有时候一些关键信息很不起眼
7.差的绝对值可以讨论后去掉
8.用滚动数组不会比直接开数组慢
9.对题目的数据范围认真计算 不但可以让心中又把握 还可以直击算法的正确性
10.对于问题的边界讨论得越明晰越好 不要想着含糊简便 扎扎实实地分析 代码量并不 会
11.Inline 多什么在处理很多东西的一个过程中可以加速很多
12. A mod 在 A很大时会相当慢 用if
判断掉 A小的时候不用
13. extended 精度比real 好 但是比real 慢
14. 提交答案式的题目一般没有标准算法 贪心搜索之类的捞分
15. 后缀数组不是万能的 nlogn 1000000 2 s
16. 既要对自己的编程能力有信心 块而准地编程
也要仔细地静态差错 造数据查错 认真分析程序
17. 置换相当于是圆环同构
调试程序数据三则
1. 样例 程序普适性
2. 特殊数据 即特殊情况的考虑
3. 边界极限数据的考虑
对于整数ai f = bi * ai à f = gcd(a1 , a2 , a3 , a4…) * k;
所以 题目变成求 取出n个数
(ai<=M) 使得
gcd(a1 , a2 , a3 , … M) = 1
M = pi^qi;(i= 1.. n)
利用溶斥原理 1 shl n -1 的二进制状态 代表 gcd 是否有质因数 pi
G:\标准模型\数学方法
构造行列和为完全平方数的矩阵 c[i,j]=a[i]^2*b[j]^2
转换为构造 zig b[i] =u^2 令 zig
b1..n-1=2*k+1 => b[n]=k*k
G:\标准模型\构造
计算几何:
1. O(0,0,0)A (x1,y1 z1)
,B(x2,y2,z2) 法向量 e
(y1z2-y2z1,z1x2-z2x1,x1y2-x2y1)
2. A·B=|A|*|B|*cos u A *
B=|A|*|B|*sin u=S
3. 三维 A*B=e |e|=法向量的长度=三点确定面的平行四边形面积
4.
凸包的广义最优性 hnoi 2004
enwrap
(枚举三个点确定凸平面 为防止面积重复计算将所有点抖动)
G:\标准模型\计算几何
连通性动规:
1. 统计矩阵中的曼哈顿回路个数 (插头和分割线
人为的将路径划分为可转移的)
G:\标准模型\动规\连通性动规
1d/1D 动规一般可以用斜率(凸线)来加速
先将朴素的转移方程写出来 将 I , j , k 的项归类 映射到平面上的点
维护凸线
尽量避免用除法,注意正负后不等式两边同乘法去除法
G:\标准模型\动规\凸单调性
动规主要是要有效性的分阶段的状态
创造这种状态就可以进行动规了
G:\标准模型\动规
将一条下降一条上升的链看做是两条上升的链 无重复的点权和上升的点权就可以划分阶段了
G:\标准模型\动规
贪心单调性:
G:\标准模型\数学方法
有些题目很具有欺骗性 注意认真分析题目中的细节 有时根本没有想象中的那么难
Zju 3331
双关键字排序即是 符合 第一关键字最优下第二关键字最优(最优可以是任意有传递性的定义)
双关键字动规
G:\标准模型\动规
搜索优化 可以用不正确(比如去掉某些限制条件)但是最优的动规来 剪枝
G:\标准模型\搜索
确立好合适的限制搜索
G:\标准模型\搜索
最大流的充要条件是没有增广路
二分图G 中 求出完备匹配后 在残量网络中求出强连通分量
1. 任意一条处于完备匹配的边e= xi->yi
两点处于不同强连通分量
推出e 必定处于G的完备匹配中(即没有增广路可以退掉边e)
2. 任意一条不处于完备匹配的边 同上
推出e必定不处于G的完备匹配中(即没有增广路可以加入边e)
命题1.,2是可逆的
G:\标准模型\图论\二分图
二分图最大流的hopcroft算法 O(sqrt(n)*m)
高斯消元
解异或方程 运用位运算压缩方程系数
利用高斯消元求异或方程组的解数属经典算法,在这里介绍一下算法流程:
1. 设有x个变量,y个方程,写出y*(x+1)的矩阵。
2. 从1至x依次考虑第i个变量,从第k(初始为1)行至第y行中找一个第i项系数不为0的行与第k行交换。
3. 若未找到则第i个变量为自由变量,i+1,k不变,继续处理。
4. 否则用第k行与第k行后且第i项系数不为0的行进行消元,i+1,k+1,继续处理。
5. 判断解的情况:
a) 无解:第k行至y行(系数全为0)中有常数不为0的。
b) 唯一解:消元过程中无自由变量,即形成了严格的上三角矩阵,利用回带逐一求出每个变量的值。
c) 多解:出现了S个自由变量,由于每个变量可取0或1,且对于这S个自由变量的每组取值,其余变量均有唯一取值与其对应,故共有2S组解。
注意第3步是处理特殊情况(
,解的判断等)的关键步骤。时间复杂度为O(xy2),该流程稍加变换即可应用于模p方程组或一般的线性方程组。
G:\标准模型\高斯消元
G:\标准模型\高斯消元 解混联电路的总电阻
实数的高斯消元 不需要 精度判断
If e[j , i] <>
0 then break; swap(e[j] , e[i]);
If e[j , i] <>
0 then
begin
T = e[j , i] / e[i , i];
For k := i + 1 to tot + 1 e[j , k] := e[j , k] – e[i , k] *
t;
end
利用系数的分布特点 可以 优化 很多
G:\标准模型\高斯消元
抓住一个条件作为突破口 在其中递归进行 考虑好边界就行 可以大大简化思考难度和编程难度
G:\标准模型\贪心 最大要求要么全不输要么输一场
经典算法的抽象应用 很重要的思想
特殊的动规 spfa 处理阶段不明显的动规
G:\标准模型\spfa
计算几何:
Nlogn
凸包 nlongn
判断凸包和一条直线是否相交
G:\标准模型\计算几何
最大流=最小割
最小割可以对应到很多模型 如
Xor 模型
(割分成两边)
G:\标准模型\网络流
Polya 原理 : zig
|Zi|=zig|Ei|*|Zi|=L*|G|
a/b mod p =
q
(b , p) = 1 à b ^ ou(p) mod
p = 1
à a * b ^
ou(p) / b mod p = q
à a * b ^ (ou(p) – 1) mod p
= q
组合数学初步
拓展欧几里得
Ax+Ny=b=> Ax+Ny=gcd(A,N)
=d => ax.+ny.=gcd(a,n)=1
x0=x.*b/d; xi=xi-1
+n; x0 - xd-1 为 mod
N 等价类
a^y mod z=k 将 y
看作 i*sqrt(z)+j 枚举 i 计算 j 时间复杂度为 sqrt(z)
G:\标准模型\数学方法
基图相同的初始DAG到目标DAG总有不同边数的可行变换
变换序按照 max(a[s[i]]) min(b[t[i]]) 即可保证始终为DAG
G:\标准模型\特殊算法
轮换和对换的乘积 轮换A(a1,a2,a3…)
B(b1,b2,b3…)
1. A B *
(a1,b1)->C(b1,b2,b3…a1,a2,a3…)
2. A*(a1,ai)->C(a1,a2..ai-1)D(ai,ai+1…)
传球游戏 刘书 P247
最优对换排序要考虑两种情况
分别对应上面1,2
Spoj 2277 silly sort
Polygon 刘书 p252
1.正多边形的点对称分布在外接圆圆周上
2.在多边形上取点可以看作是将点染色 转换到polya定理
3.可以发现平移不产生相同形 故只考虑翻转和旋转
4.旋转置换 产生 gcd(I,n) 个等价类 循环节长度为 n/gcd(I,n)
翻转置换 分
n奇偶讨论 奇: k(1)=1 k(2)=n div
2;
偶: 1. K(2)= n div 2
2. k(1)=2 k(2)=n div 2 -1;
基于Nim游戏的sg函数
1.局面分割定理 胜负与异或规则一致
sg(a,b,c,d…)=sg(a) xor sg(b) xor sg(c)…
2.sg(s)=0 所有s->t sg(t)<>0 ó sg(a)不属于g(a) (a属于S)
Sg(s)<>0
存在s->t sg(t)=0 <= x=(1..sg(a)-1)属于g(a)
3. sg(s)=min(sg(t))
处理时记得计算好边界 观察是否有循环节和其中的规律
G:\标准模型\博弈
Poi 2000 pas
序列k划分 最大最小
看到最大最小 首先二分答案 感性认识对于 当前ans 得到最多划分 rb
最少划分 lb 那么lb-rb 都是ans 下的可行划分 运用树状数组优化转移
总时间复杂度log ans log n *n
G:\标准模型\特殊算法
Spoj 2202 抽象模型 优化动规状态
树中的路径统计 O(N) (子树+经过父亲)
同色三角形的个数 C(n,3)-zig
a[i]*(n-1-a[i]) div 2
G:\题目\网上竞赛\spoj
上方子树 优化枚举断点断边
三步骤
生成子树 预处理子树 更新
K:\标准模型\图论\树\上方子树
原根的判定:
T-1=sit pi^qi
a^((t – 1) div pi) mod
t<>1 ==> a是T的原根
原根的性质:
a^0..t-2 mod t =(1..t-1)
G:\标准模型\数学方法\数论
最短路的推广定义 可以满足乘法运算
树上的动规大多转换成从叶子向根的贪心
G:\标准模型\贪心
Ai+x*Bi=Aj+y*Bj=….
只要两两有解 即
任意 (Ai – Aj) mod gcd(Bi , Bj) = 0 就有整数解
G:\标准模型\数学方法\数论
半平面的交
N^2 note: k1 * k2 < 0
X = (k2 * x1 – k1 * x2) / (k2 – k1)
虽然是n^2 但是很多时候都有不错的效果
G:\标准模型\计算几何\半平面的交
组合 1-n 最少个数 用二进制拆分
单源自动机
G:\标准模型\自动机
两次动规 + 贪心
G:\标准模型\动规
Treap 是一种很优秀的树形结构
G:\标准模型\图论\树\treap
树上边不相交的最长的两条链 特殊情况很多的树形dp
也可以贪心 先求一条最长链 把最长链边权赋值为-1
再找一条加权最长链
G:\标准模型\图论\树
凸四边形四点共圆的充要条件是 对角和=180度
由此推导 对角和>180
度 à 三角形外接圆 包含
对顶点
对角和<180 度 à 三角形外接圆 不包含 对定点
凹四边形外三角形的外接圆肯定包含另一内点
G:\标准模型\计算几何
N 个节点有特殊性的树 利用 puffer 码可以一一对应
所以总共有 n ^(n – 2) 棵树
而对于vi 节点 限制 度为 di 对应到 puffer 码 就是 vi 元素出现 di –
1 次
所以 度限制的树 共有 n ^ (n – 2) / (di – 1) ! 棵
G:\标准模型\数学方法
有时候朴素的算法效率也很可观
计算几何边界的处理 上下抖动 或者缩小范围
G:\标准模型\计算几何
动规 先写出最简单的动规方程 想优化
实在无法优化就用贪心 也可以取得不错的效果
Hnoi 2005 day1 comb 假定每个元素最多更改到相邻Lim个元素 高度 -
lim以上
于是删减了很多状态
G:\标准模型\动规
对于一类不易描述的状态 找其中的共性 使其表达简化
Triangle 这题很有代表性 每一个三角形都由三类边组成
而每个小三角形都有一条此三类边 因此
考虑直接将小三角形当做坐标系中的点
储存其本质不同的三类边 a , b , c
统计时 枚举一条 c
边 可以转换为在直线上的点统计
满足两个约束条件 因此
从左向右扫描 建立点事件 树状数组 满足两个条件
注意将边界考虑清楚
G:\标准模型\统计问题
经典棋盘问题 将棋盘黑白染色后 曼哈顿距离集合变成了规则的两个正方形
分别做矩形覆盖 减去超出边界的三角形 枚举一条边界后 旋转四次 减去四个角上最大的三角形即可
G:\标准模型\统计问题
高斯消元 异或方程模板
字符串中二分 适用于所存信息不太大 并且查找可排序的题目
G:\标准模型\字符串处理
认真分析表示好状态 搜索题目其实也不是很难打
剔除一些冗余的状态 实现记忆化搜索
比如此题 当父亲确定后 子树的范围就确定了一半 由此缩小了一维
G:\标准模型\搜索
后缀数组: turn -> sa -> rank -> h
快排 交换 sa o :=
k2[sa[(l + r) shr 1];
Sa[i] 表示 第 i 大 的串的序号
O(n logn logn)
基数排序是下标稳定下的排序
K1 名词数组
K2 第二关键字序号数组
Sa 当前关键字序号数组
每次进行一次基数排序
O(n logn)
H 数组 表示 母串中最优
1. 最长不重叠子串 生成
h 数组后 二分长度
可重叠重复k次最长子串 二分长度
2. 不同子串数 每个子串是后缀的前缀 所以 ans = zig n – i + 1 – h[i]
3. 最长回文子串 n + 1 + n rmq
4. 最多连续重复子串 实际就是求串首最大的前缀与串尾最大后缀匹配
可以用后缀数组 也可以直接用kmp
5. 子串的最多连续重复子串
看见连续重复子串 一般就联想到枚举长度 取相邻
此题枚举长度i后 只需枚举 n / i 个点 1 + k
* i 因为任意长度为i连续重复子串必定跨过这些点
因此此题为 o ( n * ( 1/1 + 1/2 + 1/3 … 1/n)) = o(n
* ( ln(n) + e))
6. 两个串的最大公共子串
多个串的处理一般是添加一个特殊符号拼接起来
最小边集最小割 可以看作是双关键字的最小割
把 a->b c 记成 a->b c * ( m +
1) + 1
最小割容量 ans div (m + 1)
最小割最小边数 ans mod (m + 1)
G:\标准模型\网络流
动规 找到 最优子问题 有时候直接如此转换 不用找一些特殊的限制条件 方便很多
考场上此题写的是搜索 效率很不错
G:\标准模型\搜索 如果写动规的话 直接枚举一次操作
字符串判重 一般的方法就是hash 挂链 效果很不错 hash函数并不用很复杂
G:\标准模型\字符串处理
计算几何并不难 要分析好 gdb 要注意是套在外面的
Pipe 这题不能之直接用线段和直线判相交 因为有可能直接穿出去了 为此调了很久
G:\标准模型\计算几何
更快的一种方法是 从管口射入一条光线 它始终只能走在管道中
并且光沿直线传播 所以对于下管道求上凸线 上管道求下凸线
二分一个终点 I 有光能到 I 的充要条件 是
上下凸线不相交
G:\标准模型\计算几何
一道相当经典的题目 可以看做求两个函数的最早交点
直接累加超时 而标准做法
是 把即时的函数断开成一前一后 每次让底下的函数增长当前差值 在把差值又加上上面函数增长的 以此往复 很像悖论的龟兔赛跑
G:\标准模型\数位统计 此题的函数可以以数位增长 保持 1-poi -1 位 始终为0 以此减小编程难度
把算法的空间时间复杂度想好了 就开始认真考虑细节 不要怕难 只怕漏
都考虑清楚之后程序就不难写了
Fence 这题考场上想的是枚举一条边 将其他所有边的投影映射到边上 判断是否有没被覆盖的地方 投影这一步有很多情况要讨论 考场上没想清
G:\标准模型\计算几何 时间复杂度 n^2 log n
区间信息 可传递性 一般可以用并查集做
G:\标准模型\并查集
动规 复杂度 线段树优化
线段树有些时候不用下放标记信息
比如 给一段添加值 返回最小值 可以直接 用 mi[ro] =
min(mi[ls] + mi[rs]) + ts[ro]
即为这一段的标记 加上 子树的最小值
K:\标准模型\动规
数学期望 这个纯靠积累和灵活运用了
游戏一般是倒着求期望 即从当前状态到目标状态
的期望
期望本质是加权平均数 即 e = p * q 表示状态与概率的乘积之和
分状态满足加法原理
K:\标准模型\数学期望
概率的算法 最优策略有极强的逻辑性 并且可以调整状态 使先手后手都表示目标的胜率
注意发现其中的规律 最终用矩阵乘法加速
K:\标准模型\数学期望
Number 求第n个非平方数倍数 的数
此类题一般是二分+判断 如何判断是关键
考虑 1..k 中 i
若正整数i不是SquareFree,必存在素数j使得j2|i,由二项式定理可以推出公式:
(1-1)^n =c (n , 0) – c(n , 1) + c(n , 2)… = 0
C(n, 0) =1 = c(n , 1) – c(n , 2) + c…
Num(K) = ∑ u(i) * [K/i2] 0
K:\标准模型\数学方法
也可以采取存取断点 枚举中间的方法 也可以解决本题
K:\标准模型\特殊算法
group
公式:K=∑n! / (n/i)! / (i!)^(n/i) {i|n}
由费马小定理,m^(p-1) mod (p-1)=1,故我们只需求出K mod (p-1)即可。
又p-1=2*13*5281*7283,由孙子定理,只需求出K对于每个质因子的模后即可解出K mod (p-1)。
由于对于每个质因子pp,我们枚举i,求出每部分x!包含pp的次幂数F(x)与剩下部分对pp的模G(x)。
F(x)=∑x/pp+x/pp^2+…… G(x)=G(pp)^(x/pp)*G(x mod pp)*G(x/pp)
K[pp]=∑G(n)/G(n/i)/G(i)^(n/i) {F(n)-F(n/i)-F(i)*(n/i)=0}
将4个k[pp]求出后用中国剩余定理或直接枚举可以求出K,最终答案为m^K
(上述过程中需多次应用快速幂,扩展欧几里德)
K:\标准模型\数学方法
【附2:模意义下的除法】
上面的讨论还忽略了一个小问题,即Ans需要对素数P取模,而计算过程中有除法,这里介绍两种方法:
1. 设 ,则 ,即 ,由于P是素数,利用扩展欧几里德解出Z即可。
2. 由欧拉定理, ,故 ,利用快速幂取模或者预处理YP-2即可计算。
将i 拆分成不超过j 的数的方案数 Fi,j=Fi,j-1+Fi-j,j
分析好状态 讨论好边界 优化转移
K:\标准模型\动规
两线段距离是单峰函数 所以三分 距离讨论好 注意sqrt
时 取 abs
K:\标准模型\数学方法
组合游戏 :
分解游戏与游戏的和(sg xor) 子游戏互不干扰
并且平等等价
将每一个棋子都看作一个子游戏
staircase nim
如果对方在奇数位上取硬币,那么我们也类似nim在奇数位上取硬币使SG值回到0;
如果对方在偶数位上取硬币。那么我们就把他刚刚从偶数位上传到奇数位上的硬币数。
原封不动的再传回偶数位。
硬币游戏的转换 POI2003/2004 stage I Game
game
F(i,j)表示在格子(i,j)有一枚反面向上的硬币时的sg值
暴力加找规律可以得到下述结论:
1.
2.
求出所有反面硬币的sg值求异或和即可。
K:\标准模型\博弈
归纳 转换游戏
Sg and anti-sg 游戏
对于任意一个Anti-SG游戏,如果我们规定当局面中所有的单一游戏的SG值为0时,游戏结束,则先手必胜当且仅当:(1)游戏的SG函数不为0且游戏中某个单一游戏的SG函数大于1;(2)游戏的SG函数为0且游戏中没有单一游戏的SG函数大于1。
Anti-sg 规则
(1) 所有的终止局面为先手必胜局。(这一点显然,证明中略去)
(2) 游戏中的任何一个先手必败局一定只能够转移到先手必胜局;
(3) 游戏中的任何一个先手必胜局一定能够转移到至少一个先手必败局。
Multi-SG [定义]
l Multi-SG游戏规定,在符合拓扑原则的前提下,一个单一游戏的后继可以为多个单一游戏。
l Multi-SG其他规则与SG游戏相同。
删边游戏 图 -> 树 –>
[定理]
叶子节点的SG值为0;中间节点的SG值为它的所有子节点的SG值加1后的异或和。
即所有根的孩子看作一个子游戏 子游戏的sg为 子节点的sg +1
无向图的处理 多个重要点中选一个作为根 所有的与重要点相连的边都连向根
求块缩点 块内有奇数边则块的sg = 1 否则为
0
按照树的做 sg[i] = sg[i] xor (sg[j] + 1)
zmaj
将每个表达式写成一个矩阵的形式,则连续若干表达式等价于矩阵的积,循环则等价于矩阵的幂,用矩阵乘法+快速幂模拟程序,输出对应结果即可
K:\标准模型\模拟
Counts
N个数的排列与n个数的相对大小关系一一对应
所以求排列数就可以直接从最后约束个数进行递推 用矩阵乘法加速
K:\标准模型\矩阵乘法
先预处理 然后一位位统计就可以了 注意空间范围和细节
考试时可以自己测一些容易想的极限数据检测
K:\标准模型\数位统计
图中几个带最字的东西:
有向图:
最小链覆盖=最长反链
最小路径覆盖数 对应到最多的边数 直接拆点做二分图最大匹配
最小链覆盖数 对应到最多的关系数 拿关系作边 拆点做二分图最大匹配
不断删除链的被限制的尾节点 对应剩余的尾节点就是方案
K:\标准模型\图论\二分图\最大匹配
最小反链覆盖=最长链
无向图:
最小点集覆盖+最大独立集=|V|
最大团<=最小染色
最大独立集<=最小团覆盖
弦图:
最大团=最小染色
最大独立集=最小团覆盖
二分图:
最小点集覆盖=最大匹配
令S(n,k)=1^k+2^k+……+n^k,有
利用这个式子可以从S(n,1..k-1)递推出S(n,k)
Farey 序列 a / b < p
/ q < x / y b ,
y <= n and ay +
1 = bx s
P = a + x q = b + y (q <= n) q
为最小分母
相邻 a / b < p /
q aq + 1 =
bp => p / q – a
/ b = 1 / qb < 1/n(n-1)
给定四个正整数 a , b , c , d
求 a / b < p / q
< c / d min(q) min(p)
易证 min(q) ->
min(p) 所以 b / a
> q / p > d / c min(p) min(q)
讨论 类似最小公约数的求法
K:\标准模型\数学方法\数论\farey
构造从a 不断加不等于1和本身的当前数的约数 使 a
变成 b
a不断加 奇约数 , 2 , 4 , 8 … 2^q(b
减)
使当前 a , b 都为 2 ^ q + 1 的倍数
直到 a = b
K:\标准模型\构造
题意要求给出可行的划分数 使集合内点对距离最大值小于与集合外所有点距离
可以发现 一个可行集合 不可分割 只能与其他集合合并
并且优先与边最小的其他集合合并 由此类似于最小生成树的操作
将边排序 不断合并集合(做背包)
K:\标准模型\图论\树
将平面抽象 ,
可以知道一个周长最小的围墙一定是从矩形的点到矩形的点连接,中间转一次,当两点组成的矩形中是空的时将两点间连边 ,
保证了所有的边都是可以走的。
接着要求一条最短的回路 , 要包围母矩形的任意一个点A(即包围了母矩形),任意发出一条线段AB ,
等价于AB要与回路相交奇数次 , 所以把点v拆开成两个点 v1 , v 2, 对于(u,v) 与AB 相交 , (v1 ,
u2)(v2 , u1)
不与AB相交 ,(v1 , u1) (v2 , u2)
有多少个性质就拆多少个点
和边
最后统计 v1 -> v2 单源最短路即是答案
K:\标准模型\图论\最短路
结论:一个图有解当且仅当其包含点0且从点0走有向边可以到达所有点。
其实这很显然 而且是充分必要的 所以枚举删点
每次都判断即可
关键要注意 0 为根节点这一信息
K:\标准模型\图论\有向图
环的同构判断 转换为最小字典序 直接判断 最小表式法
很有启发性
K:\标准模型\字符串处理\同构
很显然转换成最小生成树 询问即是两点路径上的最大点
在生成最小生成树时 可以把新加入的边当作一个点
a a->f1 a->f2
最后询问就转换为了询问两点的最近公共祖先的点权
K:\标准模型\图论\树
快速判定相等的情况可以用枚举 + 哈希进行优化
K:\标准模型\哈希
最小链覆盖=最长反链
最长反链覆盖=最长链
注意最长链缩强连通分量后 点权要累加
K:\标准模型\图论\连通性
推出递推式 直接用矩阵乘法优化
K:\标准模型\矩阵乘法
很直接的状态压缩dp(n = 15) 就可以看出
数据小的时候可能是搜索 也可能是动规
Ak 求前k个圆使它们有交集
判定方法 : 对圆两两求最右端的交点 求交点最左的 判定是否在所有圆中
K:\题目\poi\POI2005\day3\source\杨起道
路径剖分 很强大 其实也比较容易编
K:\标准模型\图论\树\分治
N^2地求环的中心点(各点到此点距离最小)
有细节要考虑下
K:\标准模型\数位统计
每一列是子游戏 f[I , j, k] 表示I 个白子 j 个黑子
sg 为 k 的方案(/(c[i+ j, i]就是概率) 很明显每次操作可以以一个黑子划分阶段
F[I + l , j + 1 , l +
ord(l>=k)] ++ f[I , j , k]
最后游戏的和做个背包
Sg函数的范围可以观察程序确定
K:\标准模型\博弈
图的同构计数 利用polya定理 点置换一一对应边置换 利用拆分数优化点置换搜索
Noi2008
employee 构造简单的等式关系 利用流量平衡 建立网络做最大流
一类问题的分析方法 :
看清题意 注意条件 抽象模型 转换函数
Noi 2008
trans、
最大权闭合子图 有环 所以可以认为环上的点必不取 令点权为-big就可以了
G:\标准模型\网络流 noi 2009 day2
动归 关键是转换平方就是点对的个数
G:\标准模型\动规 noi
2009 day2
动归 注意利用题目中的条件 上凸线 用treap维护
Treap 要注意值参和形参
删除的点可以先标记再删除比较方便
树内的关系可以用链表挂起来
G:\标准模型\图论\树\treap
对于 floyed 有很多迁移 它可以相当于为最短路找到了一种阶段
即最短路上节点标号的大小 以此来进行动归 所以相应的可以统计最小环,最短路条数…
最短路上任意一段也是最短路
G:\标准模型\图论\无向图
Dynrank loglogn
* m 离散化后 直接在线段树中走
G:\标准模型\图论\树\treap