2017 CCPC - Online

A. Vertex Cover [zmy]

二分图,贪心构造。

B. Party [zmy]

对于每个询问我们处理一遍。首先有一个这样的性质:如果纸上写了男生集合 X ,女生集合 Y ,如果 X Y gi 倍数的子图中均存在一个完备匹配,那么一定存在一种扩充集合方案 XX,YY ,证明显然。方案数为左边存在完备匹配的集合 X 的个数乘以右边存在完备匹配的集合 Y 的个数,再减去空集的 1 。接下来考虑如何计算存在完备匹配的个数。如果直接暴力枚举集合然后匈牙利肯定会超时。我们使用hall定理,利用高维前缀和,就可以在 O(nq2n) 的时间内求出所有存在完备匹配的子集了。

C. Friend-Graph [zmy]

又拉姆塞定理, n>=6 时必然存在一个同色三角形,所以不用判断。只需暴力枚举 n<6 的情况。

D. A Secret [jds]

kmp。

E. CaoHaha’s staff [jds]

推一下公式,然后二分求解。

F. Subsequence Count [zmy]

我们维护线性变换 [f[0],f[1],1] f[0] 表示以 0 为开始的序列个数, f[1] 表示以 1 为开始的序列个数。
如果当前位置为 0 ,转移矩阵为:

111010001

如果当前位置为 1 ,转移矩阵为:
100111001

对于翻转操作,我们先交换前两行,再交换前两列。
最后,我们用线段树维护区间操作即可。

G. Palindrome Function [zmy]

枚举进制数,数位dp

H. The Karting [jds]

dp。f[i][j][k]表示前i-1个点考虑完,当前到i的路径有2j条,i和i以后还要选k个checkpoint的最大难度值,答案便是f[n+1][0][0]。

I. The Designer [wbr]

笛卡尔定理:定义一个圆的曲率 k=±1r ,那么对于两两相切有六个切点的四个圆,有 (k1+k2+k3+k4)2=2(k21+k22+k23+k24) 。其中曲率的正负号为正当且仅当它与其他圆都外切。

化简此式可以得到一个关于 k4 的一元二次方程。方程的解即为圆 k3 相邻两个圆的曲率。由此可以递推得出答案。

N 很大时,后面圆对答案的贡献微乎其微,故可以用eps卡掉。

J. Graph Of Zhuper [zmy]

首先我们用分治 fft 求出大小为 n 的连通图个数,之后我们再用分治 fft 求出所有联通块大小均为 d 的倍数的图的个数 fd(n)

ans=d|nϕ(d)fd(nd)

K. Convolution Layer [zmy]

算一下复杂度,发现就多一个 m 64 ,我们自然会想到 bitset 优化。思路很简单,不过也是抠了抠常数才过:fread读入优化+手写bitset

你可能感兴趣的:(解题报告)