Pbri

正睿AB班大讨论

正睿AB班大讨论

Day1

T1

题意:给一个 \(01\) 二维数组,定义一个 \(1\) 的权值为它到最近的 \(1\) 的欧几里得距离,问整个数组中 \(1\) 的权值之和。 \(n,m\le 3\times 10^3\)

\(sol\) :枚举每个 \(1\) 点,然后考虑左上角的答案(其他方向是相同的)。我们从上往下从左往右枚举,对于同一行左边的每个位置,处理出目前最靠下的 \(1\) 设为 \(low[j]\),然后对每个点只需要考虑同一行上一个询问点和上一个询问点到这个点之间的每个 \(low[j]\) (因为上一个询问点之前的点显然不如上一个询问点优秀)。

\(code\)https://www.luogu.com.cn/paste/24tswiq9

T2

题意:给一个有 \(n\) 个网格的四连通网格块,然后如果有四个块形成的正方形(一个田字形)中有三个点是黑色,那么就把另一个点染成黑色。问你一开始最少把多少个点染成黑色,使得整个图形最终会被染成黑色。 \(n\le 10^5\)

\(sol\) :一个贪心策略是贴着两个相邻边的边界染色,然后好像只需要考虑左上,我好像不能理解,所以把左上,左下,右上,右下都试一试就好了。因为用 \(map\) 来存图所以带个 \(\log\)

\(code\)https://www.luogu.com.cn/paste/icevjw5x

T3

题意\(Q\) 次操作,有三种操作:

\(op=1\) :给一个二次函数 \(f_i(x)=a_ix^2+b_ix+c_i\) ,告诉你定义域是 \([0,l_i]\) ,插入集合 \(S\)

\(op=2\) :删除 \(S\) 中一个二次函数

\(op=3\) :给一个 \(sum\) ,设目前 \(S\) 中有 \(k\) 个二次函数,求 \(\sum_{i=1}^kf_i(x_i)\) 的最大值满足 \(\sum_{i=1}^kx_i=sum\)

\(Q\le 10^5\) \(op=1\) 的个数不会超过 \(\dfrac{Q}{2}\)

\(sol\) :最优结果一定满足对于所有的 \(f'(x_i)\) 相等。因为考虑一次函数的情况,一定是按照斜率从大到小首尾相接连一起,然后二次函数你考虑微元法一类的思想就变成一堆直线了。然后你每次可以考虑二分一个斜率,然后再在每个函数二分出在哪个位置。这样是 \(\Theta(Q^2\log\epsilon^{-1})\) 的,考虑用数据结构维护一个函数 \(X(k)\) 表示斜率为 \(k\) 时的 \(\sum x\) ,然后用 \(Y(k)\) 表示 \(\sum f_i(x_i)\) ,然后可能需要离散化一下(因为你数组下标要是整数),然后可能需要支持区间加一次函数和区间加二次函数(维护一下各个系数就好了),据说线段树二分和树状数组倍增都是 \(\Theta(Q\log Q)\) ,扔个 \(std\) 吧。。。。

\(code\)https://www.luogu.com.cn/paste/b7jngzqm

Day2

T1

题意:给一个 \(n\times m\) 的格子图,其中有 \(k\) 个障碍点,一个麻花可以被六元组

\[(i1,i2,i3,j1,j2,j3) \]

所描述,满足

\[1\le i_1<i_2<i_3\le n, 1\le j_1<j_2<j_3\le m \]

设格子

\[A(i_1,j_1),B(i_1,j_2),C(i_3,j_2),D(i_3,j_3),E(i_2,j_3),F(i_2,j_1) \]

那么麻花就是

\[A→B→C→D→E→F→A \]

绕一圈所有线段的并。用示意图表示:

\(\,\,\,\,\,\,\,\,\,j_1\,\,\,\,\,\,\,j_2\,\,\,\,\,\,j_3\)

\(i_1\,\,\,\, A-B\)

\(\,\,\,\,\,\,\,\,\,\,|\,\,\,\,\,\,\,\,\,\,|\)

\(i_2\,\,\,\, F-+-E\)

\(\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,|\,\,\,\,\,\,\,\,\,\,|\)

\(i_3\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,C-D\)

言归正传,你需要数出给定的格子图中有多少个不经过障碍的麻花。两个麻花不同当且仅当描述它们的六元组不同。

\(sol\) :实际上我们只需要计算每个点左上角的圆环数量以及每个点右下角的圆环数量即可。这里是对称的,所以我们只考虑左上角的。因为一个点左边第一个障碍点就会阻止它往左扩散,所以我们每个区域分开算就好了,默认左边没有障碍点,然后对于左边的点 \(j\) ,然后考虑一个点最多往上走多少,设为 \(up_j\) ,那么我们在线段树上在 \([1,up_j]\) 区间加一,然后查询的时候,我们直接查 \([1,up_i]\) 的和即可,然后对于这个点上面的每个障碍点,我们给那个位置清零,线段树就ok了,不懂的看代码吧!

\(code\)https://www.luogu.com.cn/paste/9azl4c62

T2

题意:给长度为 \(n\) 的数组 \(A_i\) ,求对于 \(k=1,2,3...n\) ,从 \(A\) 中选 \(k\) 个数的异或和等于给定数 \(X\) 的方案数。

T3

题意:给定整数 \(n,m\) ,求随机变量 \(X\)\(N\) 趋近正无穷时的期望。随机生成一个 \(1-N\) 的排列 \(P\) ,考虑一个 \(N\) 个点 \(N\) 条边的有向图,第 \(i\) 条边是 \((i,p_i)\) ,显然有如下性质:每个点的出度和入度都是 \(1\) ,整个图由许多环组成,令第 \(i\) 个环的长度是 \(l_i\) 总共有 \(k\) 个环,则

\[X=\dfrac{\left(\sum_{i=1}^ll_i^n\right)^m}{N^{nm}} \]

可以证明:

\[\left(\sum_{i=1}^ll_i^n\right)^m=\Theta(N^{nm}) \]

Day3

T1

题意:你可以花费 \(p^2\) 的代价获得价值为 \(p\) 的物品,你需要得到 \(t\) 个物品,给定一个常数 \(D<1\) ,将所有物品排序,令 \(W=\sum_{i=1}^tP_iD^{i-1}\) ,问使 \(W\ge W_0\) 最少需要多少代价

\(sol\) :我们看到两个序列相乘!我们看到平方和!柯西不等式!!!

由柯西不等式可以得到 \(\sum_{i=1}^tP_iD^{i-1}\le \left(\sum_{i=1}^tP_i^2\right)\left(\sum_{i=1}^tD_i^{2i-2}\right)\) 显然我们只需要让两个数列成比例就能形成等号,所以答案就是 \(\dfrac{W^2_0}{\sum_{i=1}^tD^{2i-2}}\)

\(code\)https://www.luogu.com.cn/paste/j8eix2za

T2

题意:给一个网格图,然后有些边不能走,告诉你源点,每次询问一个点,问能否删掉一条边改变这个点的最短路

\(sol\)\(DAG\) 上的支配树,做法是对每个前驱(指的是最短路 \(DAG\) 上的前驱),求他们在支配树上的 \(lca\) ,由 \(lca\) 向这个点连边。由于支配树求的是支配点,这题要求支配边,所以如果我设计一个麻花形他就炸了,于是我们需要考虑如果支配树上的边是网格图中真实存在的边,我们就给这条边赋值为 \(1\) ,最后看每个点到根的路径上是否由这样的边即可,提前 \(dfs\) 一遍就好了。

\(code\)https://www.luogu.com.cn/paste/j7azh5in

posted @ 2021-08-04 19:55  Pbri  阅读(110)  评论(0编辑  收藏  举报