「2020-02-14 省选模拟赛」同桌与室友 (mate)
第一问,注意到十六进制数的长度不超过 \(15\),预处理每种长度的数在序列中占多少长度可以判断位数。之后通过数位之间的整除、取模即可求得。
第二问,求出第一问后相当于小于某个数的所有数做数位统计,数位 dp 即可。
设 \(f_{i,j}\) 表示有 \(i\) 行 \(j\) 列,其中每行都有涂黑的方案数。
\(\text{ans} = \sum \dbinom{n}{i}f_{i,m}\)
考虑两种转移:
新增一列。\(f_{i,j} \xleftarrow{+} (\dbinom{j}2+j+1)f_{i,j-1}\);
新增一列,以及若干行。考虑原来某列第一个位置的上一个,和最后位置的下一个位置,和新增的 \(i-k\) 个位置一共形成 \(i-k+2\) 个位置。那么相当于在 \(i+2\) 个位置中选出 \(i-k+2\) 个位置填数。 \(f_{i,j} \xleftarrow{+} \dbinom{i+2}{i-k+2}f_{k,j-1}\)。转移是卷积的形式,NTT 即可。
先考虑 \(2^n\) 做法。记录每个点连出的点集,状压 dp 每个集合是否可行。
折半搜索。前一半需要统计子集中有多少个合法,可以 FWT;在后半搜索的时候直接求出对应的集合最大能是多少。
如何判断删去若干边之后,图能否被分成两个连通块?
每条边随机一个权值,点权为相邻的边的边权的异或和,满足所有点权为 \(0\)。若删去的边的边权异或和为 \(0\),则被分成两个连通块;否则不是。
\(2^c\) 枚举删掉的边集,若异或和为 \(0\) 则不连通。
关于边权,dfs 树上,非树边随机,树边构造即可。
原文:https://www.cnblogs.com/defK/p/15220488.html