day 1
A
给G<V,e(in)E>,w(e)1M(diff),|V|100K,|E|1M,求
- MST
- MST上任意两点间距离的期望
显然MST唯一
E(dis(u,v))可以通过计算每条边的贡献加出来
B
n个并行游戏,每个游戏都在一个1x20的棋盘上有20个不可区分的棋子,两人轮流,每人可以选择一个棋子往右跳到棋盘上第一个空点,不能走就输了.求胜负.
状压SG,O(n×20+2^20).
每个点的扩展点个数$le(20所以sg值)le$20,那么可以用bit trick来完成mex.具体的就是
typedef unsigned int MO;
MO mex(vector<MO>&z){
MO x=0;
for(auto y:z)
x|=y;
return (~x)&(x+1);
}
C
n×m棋盘上放一些障碍,且障碍格8联通区域与同行/同列都没有障碍,求棋盘无障碍点距离期望.
首先x轴y轴分开扫描线,然后考虑一下遇到障碍点绕弯的情况.
似乎细节很多且卡常.
D
给序列|a|100K, 100K询问给l,r求
- gcd(a[l::r])
- gcd(a[u::v])==x(u(le)v)组数
第一问很简单,线段树/ST表.
第二问很简单,你可以预处理:选定u,
- Step 1: v=u
- Step 2A: GG=gcd(a[u::v])
- Step 2B: 找最大的v'使gcd(a[u::v'])=GG,加入答案
- Step 2C: v=v'+1
- Step 2D: if v>n break; else goto 2A.
对每个u最多循环log(u)次(因为每次的GG都是上次的约数).
E
有N($le$9)个黑节点N个白节点,要求连接成一个环,其中一些白节点如果和一些黑节点相邻那么它会造成1的损失,求损失最少的方案(任意一组).
枚举黑节点的顺序,然后跑二分图最大权匹配.
F
F(m,n)=sum(i:1->m,(phi)(i*n))其中(phi)就是那个欧拉函数.
G(k)=k(k(k(...k))) mod 10^9+7
dzy loves math 4和《上帝与集合的正确用法》的无机结合.
G
有n×m(n,m$le$10)的网格,在网格中间加入一些斜杠使网格不能被扭曲.斜杠不能相交.
首先,一个格子中有两种摆斜杠的方法,它们的作用是等价的.
考虑一些显然正确的事情:这个网格不管怎么扭曲中间的方格也只能是菱形,是平行四边形.那么我们考虑一条横杠的作用,是让加入横杠方格一列上所有的横边和一行上的所有竖边垂直.
那么我们要让这个网格形态固定,一定是让所有的横竖边都相互垂直.那么我们可以自然的将行列建点,构造二分图,每加一条横杠就是让对应行和列连一条边.最终我们要使这个二分图联通.
设f[i][j][k]为左边i个点右边j个点总共k条边的方案数,可以自然的列DP方程(容斥一下).最后乘系数,求和.这个DP还是非常经典的.
H
将n($le$100K)个数的序列染色,每个数只被染一次,染一段长度为k的区间有a_k种方案,求总方案数(模313).
设A[i]为染了前i个的方案数,A[0]=1,则A[j]=sum(i:0->j,a[j-i]k_i).这个式子是一个典型的分治FFT式子.
I
用1×2多米诺骨牌铺满n×m(n,m$le$16)网格的方案数.
轮廓线DP,打一分钟的表.
(存在伪多项式算法:http://www.math.cmu.edu/~bwsulliv/domino-tilings.pdf)