北大集训2018垫底记
day0
早上五点半起来赶飞机。
下午到北大报到,然后是试机。
试机赛有一道 PKUSC 原题,一道造计算机题,一道交互通信题。感觉要完。因为我既不会造计算机也不会通信题。
农园一楼的菜还是挺好的,就是有点贵。随便吃一点就要 15+,吃好一点就要 25+。
day1
开场先看题,然后感觉第一题挺可做的,就头铁去写 t1 了。最终写了两个小时还是写出来了。
然后去看第二题,先把暴力写了。又看到有一个所有数都是某个质数的幂的子任务,也去写了一下。最开始写了个比较复杂的做法,后来想到只需要记指数的差就好了,改了一下就过了那个子任务。
第三题想了好久还是不会,只能打暴力了。
得分:100+49+25=174
出考场后听说有人两个多小时就AK离场了。。。
下午讲评,三题都挺简单的,都可以放成联赛模拟了,但我就是写不出来。我退役吧。
晚上回宾馆颓睡觉。
题解
A
这个质心坐标好像不是所有顶点坐标之和的平均数啊?
只用求出每个顶点最先接触地面的时间再取个min就好了。
对于每个顶点,它的 \(y\) 坐标是一个二次函数+正弦函数的形式,那么可以先求出最早碰到地面的时间是在正弦函数的那个周期内,然后求一下导二分一下得到这个周期内的单调区间,再在单调下降的区间内二分得到答案。
时间复杂度:\(O(n\log^{-1}\epsilon)\)
B
记 \(x_i=\frac{b_i}{d_i},y_i=d_i\)
那么 \(\prod b_i\leq \prod d_i^2\Longleftrightarrow \prod x_i\leq \prod y_i\)
注意到 \(\prod x_i<\prod y_i\) 的方案是和 \(\prod x_i>\prod y_i\) 的方案一一对应的,所以我们只需要求出总的方案数和以及
\(\prod x_i=\prod y_i\) 的方案数就好了。
时间复杂度:\(O(n\sqrt a_i+n\log^2a_i)\)
C
注意到把一棵树的点分树沿着原树中的一条边切开后得到的两棵树是每个点选择他在对应那棵子树中的最近祖先后连成的树。那么反过来也可以把两棵点分树拼在一起,就是把那条边的两个端点到根的路径按任意顺序拼在一起。
记 \(f_{i,j}\) 为以 \(i\) 为根的子树构成的点分树中,\(i\) 的深度为 \(j\) 的方案数。
转移为
大概是这样吧
搞个后缀和优化一下就好了。
day2
看完题之后感觉第三题比较简单,弄个指数生成函数再反演几下就好了。
然后去看第一题,想了一会想到了 \(O(n\sqrt n\log^2n)\) 的垃圾做法,显然过不了。又想了一会,就放弃去写暴力+一些部分分。
t2 先写了个暴力,打了个表发现了一点规律,就是每一行的最左边一个到最右边一个 \(1\) 中只有前面几个位置可能有 \(0\)。这样 DP 就只用 DP 每行的前面一部分就好了。
得分:\(55+49+100\)
然而又有人AK了。我退役吧。
题解
A
首先你要会 \(O(n+m)\) 的无修改的做法。
考虑每加入 \(O(\sqrt m)\) 个修改就重构一次,询问的时候就把没有扔进去重构的修改单独计算一下贡献。
时间复杂度:\(O((n+m)\sqrt m)\)
B
先把全部周长 \(\div 2\)。
考虑一个 \(1\times 1\) 的矩形,能把 \((x,y)\) 的方案变成 \((x+1,y+2)\) 的方案。
记 \(f_i\) 为 \(2S-C=i\) 的方案中 \(S\) 最小的是多少。
还有一个结论:宽 \(\geq 2\) 的矩形中每种宽只会出现一次。因为你可以把两个 \(a\times b\) 和 \(a\times c\) 的矩形变成 \(1\times a\) 和 \(a\times (b+c-1)\) 的矩形。
后面的部分我忘了,想起来再补。
时间复杂度:\(O(n\sqrt n)\)
C
记 \(f_i\) 为把 \(1\sim n\) 的排列分成 \(i\) 段,每段内都是上升的且每段的最后一个大于下一段的第一个的方案数。
记 \(g_i\) 为把 \(1\sim n\) 的排列分成 \(i\) 段,每段内都是上升的的方案数。
那么 \(g_i\) 就是第二类斯特林数 \(S(n,i)\)
在容斥一下就可以得到 \(f_i\)
时间复杂度:\(O(n\log n)\)
day3
开场先看题,发现 t2 的 80 分之前做过,直接 lct+线段树就好了。然后码了半个小时交上去拿到了 80分。
然后去看第三题,直接把 t2 的代码复制过去加点东西就好了。
t1 不会造计算机,只会三个部分分。
最后自闭了一个小时。
得分:15+80+100
题解
A
弄一个校验码。单个数的校验码 \(\bmod P=C\),多个数的校验码就把单个数的校验码异或在一起就好了。如果 \(\bmod P=C\),说明只有一个出现了奇数次的数。
然后弄 15 个哈希函数,把所有数扔进 15 个桶内,每个桶中有 1/2 的概率异或每个值。
最后枚举所有 \(2^{15}\) 个桶的组合,如果只有一个数就输出。
\(F_2\) 下的 \(15\times 10\) 的矩阵满秩的概率约为 \(96\%\),再加上校验码的误差,正确率为 \(90\%+\)
B
不会。
C
先用 lct+可持久化线段树处理所有区间的代价。
然后决策单调性优化DP即可。
时间复杂度:\(O(nk\log^2n)\)
day4
先开 t1。感觉细节会很多,想了一会没想到什么好的做法,就写暴力,下一题。
t2 猜测是网络流,试了几种建模方法都不对,就写暴力,下一题。
t3 之前听说过矩乘可以分块做,就写了矩乘 ,把整个 \(125\times 125\) 的网格分成 \(5\times 5\) 个 \(25\times 25\) 的子矩阵,然后每个节点负责算一个子矩阵的矩阵乘法,最后把所有节点算的结果再传回来。总共要 \(3\times n^{\frac{2}{3}}+1=76\) 轮。
这个通信题写起来挺麻烦的,各种坐标都要手算,调试也很不方便,写了好久才拿到分。
然后就自闭了。
得分:\(24+8+61\)
题解
A
注意到初始的 dis 值只有 \(2^{60}\),而不是 \(n\times 2^{60}\)。
大概就是让每个点的 dis 是最短路的时候才更新其他点。
\(rank_x\) 是 \(x\) 是第几个 dis 值达到最短路的。
第 \(i\) 次入队时 dis 变成 \(2^{60}-i\)
最后一次时 dis 变成 \(rank_x\times k\)
B
连通块个数最多等价于没修路的边数最少。
然后就直接费用流建图了。S 连到左边的点下限 1 上限 \(k\) ,右边的点连到 T 下限 1 上限 \(k\),每条边费用\(-\infty\),那么就是最大费用(最小/可行)流了。注意不是最大费用最大流。
C
我的做法每轮每个点只能向 \(25\) 个点发信息。因为每个点每轮只能向同一个点发送一条信息。
那么怎样发送更多信息呢?
转发!
假设 \(A\) 要向 \(B\) 发送 \(25\) 个信息,那么我们就可以先由 \(A\) 向 \(25\) 个节点发信息,然后下一轮这 \(25\) 个节点再向 \(B\) 发信息。
这样就可以把轮数优化到 \(6n^{\frac{1}{3}}+1=31\) 轮。