• 2022省选前集训


    20220211省选组总结

    T1

    观察可知答案至多由两个圈组成,因为一旦方向上有身体就会开始“卷小”,此时无论怎么转都会面向身体的一部分。

    由此,DP,分别求出一个圈的顺时针/逆时针答案,再枚举连接点将两个圈合并即可。

    T2

    没有什么营养的题目。。。
    对于每个圆算剩余的周长,由于 \(n\) 只有 \(1000\) ,可以直接枚举其他圆,余弦定理求相交弧对应的极坐标区间。
    将得到的若干个区间求并可得到答案。

    T3

    分两个part。
    part1: meet in middle 求 $ \le lim$ 的点集个数。
    part2: 矩阵树定理 求每个大小的点集的方案数。

    20220212省选组总结

    T1

    可通过从大到小枚举每一个数,根据其位置快速计算逆序对个数。
    由此,容易写出答案的 GF:

    \[\left[ x^k \right] \prod_{i=1}^n \frac{ 1-x^i }{ 1-x}=\left[ x^k \right] \left( \frac{1}{1-x}\right)^n \prod_{i=1}^n \left(1-x^i \right) \]

    此时左边易用组合数计算, \(x^i\) 的系数即为 \(i+n-1 \choose n-1\) ,于是问题只剩下右边。
    该问题类似背包,容易想到用 DP 做,然而物体太多、值域太大,显然不能直接完成。
    注意到 \(k \le 10^5\) ,要求的只是前 \(k+1\) 的系数,如果我们将生效的 \(x^i\) 才称之为物体的话,由于每个物体的价值不同,物体个数至多只有 \(\sqrt k\) 个。
    不妨设 \(f_{i,j}\) 为放了 \(i\) 个物体,此时的指数是 \(j\) 的方案数(系数),为了每个物体的价值不同,转移采取每次将全部已放物体的价值 \(+1\) 的方式,每次考虑是否放入 \(1\) ,并且在此过程中可能会“创造”出一个 \(n+1\) ,需要减去。具体地讲,转移式如下:

    \[\large f_{i,j} = f_{i,j-i} + \left( -f_{i-1,j-i} \right) - \left(-f_{i-1,j-(n+1)}\right) \]

    T2

    有自环的情况可以多次刷新排列,先不考虑。
    按反拓扑序处理出每个点到终点的期望最短距离 \(F_u\)
    考虑一个点从多个点 \(v , (u,v)\in E\) 转移过来,点和边权可能会有任意组合,

    20220216省选组总结

    T1

    看到 \(k\) 次方一般几个思路:

    1. 先计算贡献为 \(x^k\) 的有多少个,再统一算(这很蠢所以基本不会用到)。
    2. 为了方便统计,同时维护 \(0\) ~ \(k-1\) 次方,用二项式定理维护。
    3. \(x\) 个合法位置 有 \(x^k\) 贡献 的,可以转化为 \(x\) 个中选 \(k\) 个的方案数(可重)。

    这题就是第三种,于是可以将计算 有 \(x\) 个的方案数 转化为 有 \(k\) 个的方案数。
    这里有贡献的位置称之为“谷”(取名于其在平面上的形状)。一个“谷”除了该点外还包括两侧的“山坡”。
    以下分为几步计算答案:

    1. 计算 \(f_{i,j}\) ,这里 \(f_{i,j}\) 表示 \(i\) 个“谷”,总长度为 \(j\) 的排列数。
    2. 计算 \(g_i\) ,表示可重集合 \(S\) 的大小为 \(k\) ,元素种类为 \(i\)\(S\) 个数。
    3. 统计答案。

    2 是很好做的,直接容斥即可。
    考虑 1 怎么做,可以发现若两个“谷”没有相交,它们在计算排列数时是独立的。
    于是考虑 \(k\) 个谷由多组连续的 “山脉” 拼在一起。
    暴力可以跑出“山脉”长度为 3,5,7,9,11 时的方案数,
    然后 DP ,转移为 \(f_{i+k,j+2k+1} = f_{i,j} \cdot {j+2k+1 \choose j} \cdot w_k\)\(w\) 就是上面说的“山脉”方案数。

    T2

    构造一幅图
    上层是 \(n+1\) ~ \(n+k\) 号点,相邻点连权值为 \(X\) 的双向边,
    下层是 \(1\) ~ \(n\) 号点,连单向边 \((n+i,j) \quad 1 \le i \le k , 1 \le j \le n\)
    选的边要求构成最小直径生成树。
    也就是钦定 \(1\) ~ \(n\) 号点度数一定为 \(1\) ,这样做保证了两个点 \(i,j \quad (1 \le i,j \le n , i \not = j)\) 之间的距离就是原题中给的式子。
    于是考虑该图如何求绝对中心 \(S\) ,如果在两层之间的边 \((n+i,j)\) 上,则要求 \(dis(n+i,j) \ge \text{S与其他点的最小距离最大值}\) ,后者可以直接 dij 求。
    否则,直接按照最小直径生成树的方法做。

    20220218 省选组 总结

    栋爷的题呢

    T1

    \(a_i\) 取反,那么一个方案合法当且仅当每一个数都有一个位,是由它独自占据的。
    那么这些位打上标记,表示被且只被覆盖一次。
    \(f_{i,S}\) 为 到第 \(i\) 个决策点,目前覆盖的状态为\(S\) 的方案数,其中,\(S\) 的一位为 0/1/2 分别表示 没有被覆盖/被覆盖多次/标记位。
    如果直接转移的话容易发现是会算重的,容斥一下,若是标记位的集合为 \(S\) ,就给其赋上一个 \((-1)^{\lvert S+1 \rvert}\) 的系数。

    T2

    将每个询问区间写成点,有相交的就连一根流量为 重叠部分\(\sum a_i\) 的边。
    给每个区间初始的牌堆大小,令其取区间 \(\lbrack l_i , \min(r_i , l_{i+1}) \rbrack\) ,即每个牌堆优先分给右侧的区间,于是上面的连边就必须方向向左,表示可从右侧转移 \(\sum a_i\) 张牌到左侧牌堆。
    每次查询直接使用当前牌堆,空了就找右侧第一个有牌的,需要线段树维护边流量的最小值。

    20220219省选组总结

    T1 树形图求和

    貌似跟之前一道省选题几乎一样?
    首先想的是对每条边统计其所在的树形图个数,乘上边权后相加。
    会用到矩阵树定理求树形图个数。
    但这样是 \(O(m n^3)\) 的,显然过不了。
    题解做法是快速维护余子式?
    根本没有想到这一边,想到了也不会维护(bushi
    嗯。。。考虑将原本矩阵中的 度数 或者 边数 改成双元组,即将一条边的贡献变为 \(wx + 1\)\(w\) 为边权) 的形式。答案是矩阵行列式的 \(x^1\) 项系数。
    如何理解?
    考虑如果只计算一条边时是如何求答案的。
    若一个树形图中包括该边,才会被计算到答案里面,那么如果把该边的 1条 变成 权值 条 ,算出来的也就是该边的贡献。
    \(x^1\) 项保证了只有一条边的贡献是边权。

    讲到这里应该都明白了吧?还是提多一嘴。
    由于求 det 需要高斯消元,一般都会想直接将多项式当成原本的方程系数来消元,这就需要用到多项式求逆了(虽然只有两项简单的很?)
    实际上完全不需要求逆(我根本没写多项式……),只用对常数项高斯消元即可。
    但是这个高斯消元需要额外步骤,其实就是不仅仅求出下三角矩阵,我们只保留一条对角线,其他位置的常数项要求全部为 \(0\)
    为什么?
    由于我们只会取一个一次项,此时若在对角线外取了数,则有至少两个数不在对角线上,这些数中至多只有一个能取一次项,于是必有常数项 \(0\) 会被取到,也就没有贡献了。
    这样真的好写很多。。。

    T2 旅行

    还没敲。。。
    首先是二分答案,由于题设,旅行一定是按dfn序做的。
    那么我们对每个点维护二元组 \((a,b)\) 的集合表示第一天 \(a\) 最后一天 \(b\)
    对于所有 \((a,b), (a',b')\) ,若有 \(a \le a' , b \le b'\)\((a',b')\) 显然不优,就没必要存在了。
    合并儿子时使用启发式合并,根据某种方式排序后就可以前缀最小值+双指针了吧。
    排序什么的可以用归并可以保证复杂度是 \(O(n \log n \log Ans)\) 的,或者直接 sort 多个 \(\log\) 貌似也能硬刚。

    T3 字符串游戏

    先倒着扫一遍判合法性并找出二元组 \((a_i,b_i)\) 表示 \(a_i\) 要移动到 \(b_i\) 的位置。
    做完第一次操作后一定是由这些 \(a_i\) 组成的字符串。
    然后设 \(v_i\) 表示做完第一次后 可以提供的位置数 , 需要保证能覆盖到对应最左侧的需求位并至少留下一个位置(防止灭种)。
    那么每一次操作相当于将 \(v_i\) 往前贡献一次,这样的贡献是会保留下来继续对前面造成影响的。
    会不会有贡献多了的情况,比如到达了 \(b_i\) 后继续将后面的贡献转移到后面?
    不会,原因是当 \(b_i\) 该过程完成了,前面得到的可行位置就是该过程前的所有位置了,前面的答案也不可能更大。

    20220221省选组总结

    T1

    Burnside引理的基础应用
    先考虑旋转,联系裴蜀定理知不动点个数和为:

    \[\large \sum_{i=1}^{m-1} {\frac{n}{\gcd(m,i)} \choose \frac{m}{\gcd(m,i)}} \]

    发现这只跟 \(\gcd\) 有关,于是枚举 \(\gcd\) 计算,若 \(x \vert m\) ,则 \(\gcd(m,i)=x\)\(i\)\(\varphi(\frac{m}{x})\) 个。可以通过预处理 \(\varphi\) ,再 \(O(\sqrt m)\) 枚举因数快速计算。

    然后考虑翻转,根据 \(m\) 的奇偶性分成三种情况,分别计算即可。
    大胆写式子,列组合数可以合并。

    20220222省选组总结

    T1

    不会暴力怎么打是我的问题QAQ
    总归打了个水法20pts。
    暴力是对于每个格有两种删法,确定了哪种后在它之前必要删除的格子和删法就都确定了,这是 \(O(n^4)\) 的,35pts。
    然而会了暴力怎么就不会满分呢???
    每个点有两种删法,左或右,一个先删左的格子,它左边的格也一定是先删左的。
    于是左右两种方向做,继承前一个格子删的点,复杂度就是 \(O(n^3)\) 的了。

    T2

    对于一颗生成树,每个点的度数是 \(d_i\) ,它的贡献就是

    \[\prod_{i=1}^n d_i \prod _{i=1}^n w_i^{d_i} \]

    所以我们对每个点分别考虑,又结合Prufer序列相关知识,
    Prufer 序列与生成树一一对应,每个点的度数则为 序列中出现次数+1,序列总长度为 \(n-2\)
    设点 \(i\) 的 EGF 为 \(F_{i}(x)\) ,则

    \[F_i (x)= \sum_{k \ge 0} \frac{w_i^k x^k (k+1)}{k!}=e^{w_ix}(w_ix+1) \]

    那么答案就是

    \[\begin{align*} Ans&= \left[ \frac{x^{n-2}}{(n-2)!} \right] \prod_{k=1}^n w_i \prod_{k=1}^n F_i(x)\\ &= \left[ \frac{x^{n-2}}{(n-2)!} \right] {\Large e}^{\sum_{k=1}^n w_i x} \prod_{k=1}^n w_i \prod_{k=1}^n (w_i x+1) \end{align*} \]

    这里前两个可以预处理,最后一个背包做,最后暴力算答案。
    复杂度 \(O(n^2)\)

    T3

    子任务:可以对整个序列维护一个大根堆,每次加入一个数,弹出堆顶元素。

    由此可以很自然地得出分块的做法。
    对每个块维护同样的一个堆,并记录每次加入的数。
    整块情况直接做即可,散块需要将前面的记录先结算,此时直接暴力复杂度会退化,注意到寿司和人实际上地位相当,每个数会被修改为经过它的数中最小值,对加入的数维护一个小根堆,从 \(l\)\(r\) 枚举 \(a_i\) ,将 \(a_i\) 对比并对调。

    其实题目就做完了。。。但是卡常挺悲哀的QwQ
    注意不要直接对所有块维护小根堆,而是先用 vector 记录下来,在需要维护整块信息(修改散块前)时用构造函数将 vector 转成 priority_queue ,原因是 push() 比 push_back() 要慢得多。

    20220225省选组总结

    T1

    奇技淫巧增加了!
    在边权上做文章,要使 \(m^2\) 的其中一个 \(m\) 变成 \(\log m\) 的话,就加点 \(\frac 1 2\) 进去吧!
    设一条边还需要的点权为 \(w_i\) ,若其所连的两个连通块点权都不超过 \(\frac {w_i} 2\) ,这条边就不可能有贡献。
    那么对每条边设阈值,扔到连通块上,用堆维护。

    T2

    设两侧都要经过的点个数为 \(A\) ,若 \(A\)\(4\) 的倍数很容易做,直接每四个数一组拆开即可。
    否则,若 \(A=4k+2\) , 直接搞就是不行的了,那么如果有两个 \(LR\) 中间夹着至少一个 \(A\) ,可以利用这个 \(A\)\(LR\) 发挥出 \(A\) 的效果。

    T3

    听说只要把递增的条件忽略掉就可以了。。。

    20220228省选组总结

    T2

    容易发现答案一定满足 \(siz_{ans} > \frac{siz_1} 2\) ,那么把树按DFS序拍到序列上,此时的带权中心一定在答案的子树内,倍增往上跳。
    修改操作需要树剖,带权中心需要在线段树上二分做到 \(O(n \log n)\) ,最后的倍增向上也是 \(O(n \log^2 n)\) 的复杂度。
    这是使用线段树维护的情况。

    然而我们知道线段树求区间和会有 \(3\) ~ \(4\) 的常数,况且复杂度已经是 \(O(n \log^2 n)\) 的了,没必要为了 \(O(n \log n)\) 求带权中心而使用线段树,不如使用树状数组,可以减小最后求答案的常数,牺牲求带权中心的复杂度。

    T3

    《论爆搜时间复杂度层面的各种优化》

    这里详细写写题解做法吧。
    里面说的复杂度 \(O(2^{\frac n 2}n^2)\)\(O(3^{\frac n 2})\) 取决于最后的子集卷积写法,然而前者是一定会有的。

    对于每个合法方案,每个点的度数都不超过 \(1\) ,于是我们将 \((2i-1,2i) \quad ,1 \le 2i \le n\) 相连,这样做的目的是将边都连起来成为若干个连通块的形式,从而将多条边的贡献统一计算,来加速计算过程。
    此时每个点的度数仍然是不超过 \(2\) 的,于是一个合法的方案只能由链和环组成。
    将每个链和环的贡献分开计算,可以 DP 分别求出点集 \(S\) 构成一个 链/环 的方案数。
    求环这里可能会卡住,用断环成链来避免算重,钦定一定断开最左侧点的一条连边(不删上面所说手动加的边),这样无论是环还是链,状态中都只需要记录点集 \(S\) 和目前的终点 \(x\) 即可。
    复杂度是 \(O(2^{\frac n 2}n^2)\) 的。

    然后把二者合并起来(子集卷积?),同样,为了避免算重,我们钦定每一次新加入的点集 \(S'\) 包含 \(S\) 中最小点,
    如此可以 \(O(3^{\frac n 2})\) 直接卷。

    总结

    1. 时间分配不合理,赛时用了大量时间写T2,快写完时才发现是假的,导致暴力没有时间写。
    2. 要有效分析复杂度,较低等级的复杂度可以牺牲为目前必要的最大复杂度,以换取最大复杂度的常数减小。
    3. 关于计数题,为了避免算重可以考虑钦定一些条件,要求该钦定会使最终算得的每个方案出现次数便于计算(如都出现相同次数);
    4. 接3 ,T3 在优化时间时,利用图“稀疏”的特性将 \(n\) 降为了 \(\frac n 2\) ,实质上是将多条边的贡献同时计算了,这给我们的启示是可以将散的东西利用特性组合,由此一次计算多个贡献,达到加速的效果。

    20220301省选组总结

    T1

    首先注意到答案一定不会有两条路径是相交的,那么将答案的路径保留下来就会是若干个连通块的形式。
    这种性质可以在一些方面帮助我们优化算法,同时,不注意该性质显然是不会影响答案优劣的,所以我们应该对题目的性质进行甄选。
    在这道题里,可以利用这个性质进行树形DP,设 \(f_{x,t}\) 表示将 \(x\) 匹配 \(t\) ,子树内所有完整连通块的最小代价和。
    转移就是考虑一个节点和新加子树的根节点是否在同一个连通块里,转移就比较显然了。

    T2

    赛时还是浪费太多时间在这道题上了(线代果然是个坑。。。)
    将所给的矩阵中提取出一个全为 \(C\) 的矩阵出来,所求行列式就是 \(\det \left(A + B\right)\) 形式的,其中 \(A\) 是全为 \(C\) 的矩阵, \(B\) 是一个上三角矩阵,主对角线由 \(1-C\) 组成。
    这样的行列式计算方式是 \(A\) 中选一些行和列, \(B\) 中选其补集,两个分别求行列式乘起来,对所有选择方案求和。
    这里两个矩阵都比较特殊,容易发现的是 \(A\) 中至多选一个数,否则其行列式就是 \(0\) ,不选时 \(B\) 的行列式也可以直接求。
    下面问题就在于选一个 \(C\) 的情况了。如果这个 \(C\) 的位置是 \((i,j)\) , 如果 \(i < j\)\(B\) 中得到的行列式一定是 \(0\) ,只需要考虑 \(i \ge j\) 的情况。
    此时 \(B\) 中没有了 \((j,j)\) 这一必选的点,就“释放”了 \(j\) 行上的点,选择的 \((j,k)\) 一定是满足 \(j<k\) 的,同时这又“释放”了 \(k\) 行上的点。
    于是形成了链状的结构, \(j \rarr k \rarr \cdots \rarr i\) ,其贡献为 \((-1)^{len-1} C^{len} \left(1-C \right)^{n-len}\)
    设在第 \(i\) 列结束的方案数和为 \(f_i\) ,则有 \(f_i=\sum_{k \vert i , k < i} f_k \frac{C}{(1-C)^2}\) ,用杜教筛加速前缀和过程。
    预处理需要做到线性。

    T3

    题解做法是真的麻烦。。。以下是 FK 的简单方法。
    观察题目函数的执行过程,区间 \((l,r)\) 有用的地方只有长度 \(r-l+1\) ,每一次相当于将最左侧一位累加到右侧的数上,
    手玩一下就能发现同一层的参数 \(len\) 至多相差 \(1\) ,同一长度且 \(work\) 不同的情况只有 \(2^k\)\(2^k+1\)
    那么就可以直接求了嘛,特殊处理的在于最右侧的 \(1\) 左侧有连续的 \(0\)
    于是线段树维护 区间异或1、区间赋值、求前驱1 即可。

    20220303省选组总结

    出题人咋不承认一下第一题也可以是乱搞题,你看那个暴力跑第一的

    T1

    路走歪了。
    赛时总想着 DP 一类的东西,然后发奋删状态,确实删得很少但是正确性废了QwQ,最终还是交了暴力不知道为啥只有30pts。
    最小策略显然是先把一个数变成总的 \(\gcd\) ,目标就是要最小化这个的步数。
    另一个很显然的是这个过程至多 5 步,即将 \(6\) 个数取 \(gcd\)
    所以问题变成了枚举答案,判断是否可行。
    这个判断是否可行就很烦,不太正常。

    我们喜欢数论,又喜欢计数,所以把问题变成计数吧! —— alpha1022

    契机应该是看到 \(\gcd\) 想到数论、莫反,然后莫反不便于判断存在性,但是它可以算方案数。
    那么就把判断存在性换成了算方案数,只要方案数不为 \(0\) 即为存在。

    T2

    判断合法性要求划分内 \(a_i\)\(b_i\) 的数集和个数都相同,这个可以前缀和方便维护。
    由于数集可能很大非常难判,那么就哈希一下。

    T3

    也是路走歪了。
    虽然正解也是一个很劣的 DP 优化,然而我的 DP 不一样就根本没有什么优化的可能,死磕是没有结果的。。。
    赛时考虑的是,最后的方案画出来每条边的流向是一定的,那么就应该是由一部分点向外流,拼起来的一整个环。所以我算每个点往外流的区间最小答案,瓶颈在于两个端点的状态需要记录。

    正解是另一个 DP ,先枚举 \(n\)\(1\) 的流量 \(x_1\) ,后面的 DP 状态只需要记录到达的位置 \(i\)\(x_i\)
    如何从这个 \(O(n^5)\) 的 DP 升级到正解?
    根据题解的相关说明,DP数组 \(f\) 的每一维 \(f_i\) 都是一个凸函数,于是可以用平衡树转移。这样有 80pts。
    然后又有答案与 \(x_1\) 的关系也是凸函数,这里三分做。于是就有 100pts 啦!
    只能说平衡树和三分都没怎么写过

    大多数人路走歪了是可以拿到 80pts 的,费用流一下就行了。

    总结

    1. 要根据一些题目中的蛛丝马迹考虑题意的转化,例如今天的 T1 看到 \(\gcd\) 就应该要想到数论、莫反,进而由莫反的作用范围来考虑将题意的 “存在性判断” 换成 “方案数统计”。
      同时应当认识到的是,“计数” 这一概念完全可以表达 “存在性”、“合法性” ,并有进一步的附加属性。

    2. 碰到比较大的需要判断相同的数据时,应该要想到哈希,并大胆使用随机,以增强答案正确性和判定的简便性。

    3. DP 需要比较合理且简洁的状态和转移,DP优化方式上,将DP数组视作函数分析其性质,不失为一种有效的优化,比如 四边形不等式、凸函数、压缩DP状态 这些比较 数学+OI 的东西。

    4. 考试策略依旧不甚合理,应当认识到没有写完暴力就直接死磕满分是没有前途的。
      即使扫了一眼知道能有很多部分分可拿也好写,也要先写好暴力保底。。。

    20220304省选组总结

    这比赛也太阴间了。(汗)

    T1

    题意是执行 \(\lfloor \frac n k \rfloor\) 次,第 \(i\) 次求在树上放不交的长度为 \(ik\) 的链最多能放几条,每次前会删去一棵子树,或恢复之前删的一棵。
    赛时真是脑子抽风了没想到贪心,就想着DP能不能做,事实证明这是没有前途的。
    贪心就是每次找一个最深的子树,满足其直径不小于 \(ik\) ,然后把它删掉。删到不能删为止。
    如何加速这个过程?
    先不考虑修改,注意到答案总和是 \(n \ln n\) 级别的,于是可以预处理出所有答案可能的位置(要求其儿子子树大小小于 \(ik\) ,且其自身子树大小不小于 \(ik\))。注意这里求的是最底层的那些“基石”。
    每次求答案时从队列中取出一个数,再倍增找它最深的满足条件的祖先加入队列。如果该祖先也是队列中其他数的祖先就不加,以保证时间复杂度和正确性。
    为判断是否满足条件,需要用到欧拉序求直径,线段树维护。
    考虑修改的话,需要在线段树上打打标记什么的。。。看不懂。

    T2

    看不懂为什么有 \(a_{i,j}<=4\) 的条件。
    按右乘看,乘进去的矩阵代表着矩阵的列变换。
    最后一列全为 \(1\),最后一行除 \((n,n)\) 外都为 \(0\),意思应该是最后一列每次都统计了前面的前缀和,但不会对前面列的值产生影响。
    那么只看前 \((n-1)\) 行和前 \((n-1)\) 列,判断其能否保持一直非 \(0\),位置 \((i,j)\) 上有值意思是第 \(i\) 列会往第 \(j\) 列贡献。
    于是建图判环即可。

    总结

    1. 不要被DP思想局限了,DP考虑的状态数多、要求不能有后效性,这些特点使得它有时并不能取得很好的使用效果,而是作为“暴力”一档出现。当DP优化出现困境,并感到不太有前途时,不妨尝试一下贪心、随机化等做法。

    2. 数据范围有时可以体现题目的一些特性或者引导解法,就如T2的数据范围很大程度上影响到了我解题的思考过程。
      然而,并不是所有给出的数据范围都会有非常显然的性质引导,也如T2给出的 \(a_{i,j} \le 4\) 这一条件,并没有对解题起到任何作用。在赛后的讨论中,我们得出的结论是该性质用于保证读入的速度……

    3. 对数据范围怀抱警惕心理,遇到较大的输入时一定要记得打快读。

    4. 今天的策略相对前几场正确了不少,只是不知道为何T3的两档部分分都没有拿到。策略上的不足之处在于没有给T1预留足够的时间。规划了2h给 T1 T3,但是写完 T3 就只有 25min 了QAQ,经过短时间的思考根本写不出来,痛失70pts的部分分。

    20220307省选组总结

    T1

    赛时太冒险了,猜了个自己都觉得有问题的结论还硬着头皮写,结果确实出问题了。。。
    幸好低分档补了个暴力。
    但其实这题策略还是不错的,至少该拿的暴力分拿到了。

    看了看 Solution ,也是一种见过的技巧,但没怎么真正使用过……做题量还是太少了。
    在这种对数的种类有区分的情况下,可以根据题目的特性将多种数字使用 0/1 简化,
    并由此得到一些比较简洁且有效的结论。
    同样的套路还在之前的一些题里出现过,比如前年CSP-S的T3移球游戏。

    T2

    一眼积性函数、Min25,想起前两天还觉得这东西用的不多所以根本没有复习来着……
    吃了知识点的亏。线筛 \(O(n)\) 跑路。

    首先单求一个点值可以DP快速求得,该过程可以写成多个二元组运算的形式。
    容易看出积性函数一样的形式,满足 \(f(p^k)\) 可以快速计算的条件。
    然后 Min25 直接做即可。

    Min25基本思路:

    1. 将所有点值都暂时使用质数的计算方式,利用函数 \(g(n,j)\) 表示 \(n\) 以内质数和最小质因子大于 \(p_j\) 的数的点值和 ,计算出 \(n\) 以内所有质数的点值和。
    2. \(S(n,j)\) 表示 \(n\) 以内最小值因子不小于 \(p_j\) 的数的点值和,利用积性函数的性质,每次枚举最小质因子及其指数求。

    20220308省选组总结

    T1

    简单题!
    容易看出来的是一个排列中的环只会变成一个基环树,嗯……同时环上的相对顺序和原本相同。
    统计所有排列能形成的序列数之和,可以拆成多个环考虑贡献。
    对于一个大小为 \(n\) 的环,变构成的基环树的种数是 \((n+1)^{n-1}\)
    证明的话可以用 Prufer 序列之类的搞一搞吧。将所有点连向一个虚点,表示留在环内。
    后面的就是常规的化式子,用生成函数推一下可以变成多项式exp。
    式子推错是真的会歇菜的呀!

    T2

    T3

    总结

    策略是真的不行啊~部分原因是心态问题吧,一开始花了好长时间推T1,推出来的式子错了点细节但死活改不出来,心很慌然后心态就崩掉了。导致后面打的暴力漏洞百出,还接连读错题。

    20220310省选组总结

    呜呜呜这就是没有改题的后果吗QwQ

    T1

    基本是支配树板子了,主要是支配关系是树形结构的,于是可以建成一个树,一个点可支配的节点为其子树内的所有节点。
    注意到是DAG上建支配树所以比较简单,加入一个点时只用将其连到原本应该连的点的LCA处(嗯其实是连到这个点,只是这样说好听一点……)。
    LCA怎么维护?
    原本要求最长不下降子序列,是可以用权值线段树优化DP搞定的,这里线段树同时维护一下LCA就好了,只用维护 \(f\) 值最大点的LCA就好,其他是没用的。

    T2

    方案数转化为格子路径划分。
    式子推出来reverse一下就可以直接卷了。

    T3

    硬莫反(雾)
    先是一个比较常用(?)的式子

    \[\varphi(xy)= \frac{\varphi(x) \varphi(y) \gcd(x,y)}{ \varphi( \gcd(x,y) )} \]

    \(k=1\) 拓展到 \(k>1\)
    那么 \(k=1\) 时,经过经典(套路)莫反,有

    \[\sum_{i=1}^n\sum_{j=1}^m \varphi(ij) = \sum_{T=1}^n \sum_{d \vert T} \frac{d}{\varphi(d)} \mu(\frac T d) \sum_{i=1}^{\lfloor \frac n T \rfloor} \varphi(iT) \sum_{i=1}^{\lfloor \frac m T \rfloor} \varphi(iT) \]

    后面两个的形式是一样的,那么设

    \[f(n)=\sum_{d \vert n} \frac{d}{\varphi(d)} \mu(\frac n d)\\ g(d, n) = \sum_{i=1}^{n} \varphi(id) \]

    这两个都是可以 \(O(n \log n)\) 预处理的,原式就等于

    \[\sum_{T=1}^n f(T) g(T,\lfloor \frac n T \rfloor) g(T, \lfloor \frac m T \rfloor) \]

    !!!!!这里是令我迷惑的地方。
    钦定一个阈值 \(B\) ,当 \(T< n/B\) 时暴力算;当 \(T \ge n/B\) 时数论分块。
    为了数论分块,还需要预处理一个 \(Ans(i,j,k) = \sum_{T=1}^k f(T) g(T,i) g(T,j)\)
    嗯。。。是要处理这个的前缀和。
    那么顺利做到复杂度 \(O(n^{\frac 5 3})\)
    考虑扩展到 \(k > 1\)
    构造函数 \(F(x) = \frac{\varphi(xk)}{\varphi(k)}\) ,则有

    \[\begin{align*} F(xy)&=\frac{\varphi(xyk)}{\varphi(k)}=\frac{\varphi(xyk)\varphi(k)k}{\varphi(k)} \cdot \frac{1}{\varphi(k)k}\\ &=\frac{\varphi(xyk^2)}{\varphi(k)k}\\ &=\frac{\varphi(xk)\varphi(yk)\gcd(x,y)k}{\varphi(\gcd(x,y)k)\varphi(k)k}\\ &=\frac{f(x)f(y)\gcd(x,y)}{f(\gcd(x,y))} \end{align*} \]

    JYChen指出,除以 \(\varphi(k)\) 根本没有必要,事实也是这样:

    \[\varphi(xyk)=\frac{\varphi(xyk^2)}{k}=\frac{\varphi(xk)\varphi(yk)\gcd(x,y)}{\varphi(\gcd(x,y)k)} \]

    式子和 \(k=1\) 长得一模一样,一样做就好了。

    20220321省选组总结

    (实则是0322省选组)

    套用某位神仙的话,T1这种题就该当作不可回收垃圾处理。

    T1

    后面的 \(\sum_j f(i,j)\) 根据组合意义就是斐波那契数,那么题目就变成求斐波那契的前缀 \(k\) 次方和。
    经过多人的努力,尝试通项公式是没有前途的因为 \(p\) 不确定时的 \(\sqrt 5\) 根本搞不定。
    然后,矩乘显然也是没有前途的毕竟 \(\log n\) 太大了。
    剩下的办法第一时间想到的就是斐波那契的循环节。
    由某些结论知循环节大小不超过 \(6p\) ,那么利用生日悖论随机 \(\sqrt{6p}\) 个位置有重的概率就会是 \(50 \%\) 的,也就是有这么多的概率能找出循环节,而且这个概率多数情况是会多上很多的。

    T2

    首先第二问真的好蠢根本不用理。
    观察可知有性质:kruskal过程中的连通块在原图中也都是连通块。
    min比较难搞所以直接将其拆成两次的转移,从 \(x\) 走出的代价为 \(a_x + dis\)
    那么容易得到二分的 \(O(n \log n)\) 做法:从每个点都往外走直到走尽或者和别的块联通。

    再结合一下上面的性质,可以将二分变成一种DP做法(甚至直接推出DP也不为过)。
    就是对于原图中一个边连接的两侧点集,一定有某一条边将它们连在一起,那么可以DP处理出从下面走上来的最小 \(a_x+dis\) ,从上面下来同理。
    容易发现只要所有这样的边都连起来了,就一定是合法的一个整的连通块。

    T3

    好妙!

    首先 \(b_i \leftarrow k-b_i\) ,这样题目的限制就变成了 \(a_i \ge b_j\)\(a_i \le b_j\) 形式的。
    然后将其连边,强联通的即表示它们一定相等,可以缩成一个点。
    然后如何计数?
    观察原图发现这是个两侧所有点都有连边的有向二分图,
    那么缩点后对其使用最长路分层,可以看出相邻层的点一定两两之间有连边,
    如何证明?
    原图是满足该条件的,对于一个缩起来的大点,它一定包含左右各至少一个点,因此它与其他所有点都会有连边。
    分层之后有每一层的最大值必小于等于下一层的最小值,\(O(n k^2)\) DP做即可。

    20220322省选组总结

    (实际上是0321省选组)

    T1

    赛时推了3h只推出来个 \(n=0\) ,然后发现没有前途(
    显然的是一个矩阵由其第一行和第一列决定,然后对其合法条件进行讨论。
    最终是对 每个位置的 \(color\) 异或上位置的奇偶性 作出讨论。

    T2

    不难,就是优秀的复杂度不太好写。
    第一眼看到:每个高度的AVL都有其最小版本,而其他版本一定能够容纳该版本,这可以快速预处理出来。
    需要注意到的是 AVL 的树高是 \(\log n\) 级别的,因此完全可以设 \(f_{i,j}\)\(i\) 的子树深度为 \(j\) ,且其中所有限制都已经被满足 的最小所需点数。
    这里的限制是指我们从 \(1\)\(n\) 依次尝试放入每个数,一旦成功就不会被取出来,成为限制。
    这样做是 \(O(n \log^2 n)\) 的,已经可以通过本题。
    注意到有另一个有趣的性质,一旦一个点尝试进入时失败了,那么该深度的其余节点都不会成功。
    原因是我们放的时候一定是从小到大放,同深度的点来说,右侧的点代价一定不小于左侧,因为左侧的子树高度一定是不比右侧浅的,同时左侧点还更优。
    这样可以做到 \(O(n \log n)\) ,去掉了一个 \(\log\)

    但是这个会不会有 \(O(n)\) 做法呢?
    其实想出了一种但是细节太多完全不想写,也可能有锅。
    大致思路是利用“最小版本”的转移是 $g_n = g_{n-1} + g_{n-2} +1 $ 的特点,每次往深的点拓展时,利用记录的 \(pre\)\(cnt\)\(O(1)\) 维护代价。

    T3

    二次离线莫队,这就去学,先咕了……

    20220324省选组总结

    T1

    板题。
    建出圆方树然后长剖,又快又好写,调不出来就是另一个故事了……
    或者圆方树不会建什么的……
    好吧实测是长剖挂了QwQ

    T2

    赛时直觉是回滚莫队你敢信?
    首先看到回文建 PAM。
    然后答案就相当于区间内点在 \(fail\) 树上的链并大小。
    这样莫队就莫得前途了(
    而且在线也是不可能的(
    所以离线!
    那就扫描线吧!
    把每个串的贡献记在最右侧的右端点处,每次加入一个位置就相当于覆盖 \(fail\) 树上的一条链,树状数组维护每个位置的贡献有多少。
    这个怎么做呢?
    可以树剖,就是比较麻烦,不想写。
    还可以LCT,注意到每次access之后的所有 Splay 内都只有一个标记,所以每次access的时候将对应标记位置 \(-siz_t\) 即可。

    T3

    惨死于卡特兰数没学好。

    将三角剖分转化为卡特兰数,即每次为边(1,n)选择一个点划分成三角形,对应一对括号,包括 \(1\) 的一个多边形放在括号里面,另一个多边形放在括号之后。

    观察 \(m\) 有什么意义,结合上面的转化,发现其限制了每个时刻未匹配的左括号 \(\le m\) 个。
    这个没怎么见过呀。。。那就换成熟悉的格路计数!
    相当于求从 \((0,0)\)\((n,n)\) ,不经过直线 \(y=x+1\)\(y=x-m\) 的方案数。
    这就是有两条线的限制嘛~ 上周刚做过,容斥一下就行,每条线都对称几次,按照奇偶性分容斥系数。这样答案就是

    \[\sum_{i=0}^{2n} \left( [i \equiv n \pmod {m+1}] - [i \equiv n+1 \pmod {m+1}] \right) {2n \choose i} \]

    嗯。。。直接求还是不行,这种形式就单位根反演吧!
    观察到 \((m+1) | (p-1)\) ,那么模 \(p\) 意义下的 \(m+1\) 次单位根是存在的,直接做就行。

    20220325省选组总结

    今日份总结:退一步海阔天空。

    首先存在一个 \(d\) 使得 \(m\) 每次必定经过 \(0\) ~ (d-1) 层

    20220328省选组总结

    原来睡觉对做比赛有奇效

    T1

    先是转成边的覆盖,然后。。。第一眼想到的居然是莫队?绝对是被根号算法搞疯了。
    推了一会儿之后意识到莫队是没有前途的还不如 \(n^2\) ,弃掉。
    DP可以做到 \(n^2\) ,打挂了就是另一个故事。
    正解完全没有听懂的就是说,改完T2再去看。

    T2

    这是个可悲的故事……
    第一步看出答案是 \([x^n] \left( \frac 1 {1 - x - x^2} \right)^k\)
    联想 \(k=1\) 时的做法(也属于齐次常系数线性递推吧,不过这里只是用生成函数算通项),考虑裂项,设原式等于

    \[\frac{R_1(x)}{(1 - \alpha x)^k} + \frac{R_2(x)}{(1 - \beta x)^k} \]

    同时有

    \[R_1(x)(1-\beta x)^k + R_2(x)(1- \alpha x)^k =1 \]

    有结论是 \(R_1\)\(R_2\) 都一定是 \(k-1\) 次多项式。

    现在要求 \(R_1(x)\)\(R_2(x)\) ,先求 \(R_1(x)\)\(R_2(x)\) 同理。
    \((1-\alpha x)^k\) 取模,做到去除 \(R_2(x)\) ,得到

    \[R_1(x) \equiv (1-\beta x)^{-k} \pmod {(1-\alpha x)^k} \]

    模数比较奇怪不好求,换元,
    \(t=1- \alpha x\) ,则

    \[R_1(\frac{1-t}{\alpha}) \equiv \left(1 - \beta \cdot \frac{1-t}{\alpha} \right)^{-k} \pmod{t^k} \]

    \[f(t)=\left(1 - \beta \cdot \frac{1-t}{\alpha} \right)^{-k} \]

    此时常数项易求,一种常见的 \(O(n)\) 求法是利用 ODE ,即常微分方程
    简单来说就是对原式求导,有

    \[\left(1 - \beta \cdot \frac{1-t}{\alpha} \right) f'= -k \cdot \frac \beta \alpha \cdot f \]

    \([t^{i-1}]\) 可以得到 \(f\) 的递推式。
    为了把同余的等号变成正常的等号,我们有需求将自 \([t^k]\) 开始的项全部变成 \(0\),那么给常微分方程多一项 \(C \cdot t^{k-1}\) 。这样做是为了消去 \([t^{k-1}]\)\([t^k]\) 的贡献。
    事实上,求出 \(f(t)\) 的系数并不重要,我们要求的是 \(R_1(x)\) ,即 \(f(1-\alpha x)\)
    但是这两个方程中 \(C\) 显然是一样的,只有 \(t \rightarrow 1-\alpha x\)
    那么有关于 \(R\) 的ODE,

    \[(1-\beta x) R' \frac{1}{-a} = -k \cdot \frac \beta \alpha \cdot R + C(1-\alpha x)^{k-1} \]

    这样就能求出 \(R_1(x)\) 了。

    有一个疑问点在 \(R\) 的 ODE 处,就是那个 \(-\alpha\)
    这个算法的思路是用 \(f\) 的 ODE 算出 \(C\) ,套用到求 \(R\) 里,所以应该用 \(f\) 的 ODE 转成 \(R\) 而非直接用 \(R\) 求 ODE,以此保证 \(C\) 的不变。
    我们知道 \([R(x)]'=[f(1- \alpha x)]' = - \alpha \cdot f'(1-\alpha x)\) ,而原式中的 \(f'\) 实际上是 \(f'(1-\alpha x)\) ,所以这里需要把 \(-\alpha\) 除掉。

    T3

    容易想到 \(\varphi (ij) = \varphi(i) \varphi(j) \gcd(i,j) / \varphi(\gcd(i,j))\) ,这东西跟 \(\gcd\) 有关发挥不出什么作用。
    根据 \(\varphi\) 的转移你会发现,如果把 \(\gcd\) 变成其因子,得到的数只会更小。
    那么可以枚举 \(d\) ,处理其所有倍数之间的贡献。
    如果直接做还是有 \(O(n^2)\) 对数 有贡献,考虑简化,对于 \(d\) 的一个倍数 \(p_i\) ,只用找到其左侧和右侧的第一个大于它的即可,可以证明这样能包括所有 \(d\) 倍数的贡献,证明简单这里就不写了。
    这样能使贡献的数对个数达到 \(O(n \log n)\) 级别,扫描线一样离线询问,树状数组维护后缀最大值即可。

    20220330省选组总结

    啊啊啊啊啊AK场怎么打成这个样子

    T1

    赛时猜出结论了,也想到可以枚举 \(a+b\) 了,但是过不了样例的时候觉得一定是结论错了就没有调。。。
    先对 \((a+b)\) 取模,分成 \(x <a\) , \(a \le x < b\) , \(b \le x\) ,其中第一种是无效点,第二种的 \(a\) 的专用点,第三种需要考虑是否 \(\ge 2a\) 。若有第二种则 \(a\) 必胜,其他情况简单分讨。
    计数突破点是 \(a+b\) 的取模,这个不能直接算,那就枚举,用上面的策略计算确定第三种数个数时的 \(a,b\) 范围,根据奇偶性加到先手必胜和后手必胜中。
    A 必胜和 B 必胜一样多,通过另外两个减一下就能得到。

    T2

    注意题意的贡献是贡献而非点对贡献。

    建出反链的 SAM ,每个点的子树中,没贡献的位置是那些只有一个点的深度,用栈简单维护一下就行。

    T3

    type=2 的子任务给了一个非常明显的提示,特别是给出了 \(p^k\) 条件的情况下。

    显然不同质因子之间互不影响,可以对每个 \(m\) 内的质因子 \(p\) 求出 \(p^k\) 结尾的答案,这也是子任务的做法,不会多项式那就直接矩阵乘法吧!矩阵大小显然很小可以直接做。
    现在我们对所有的质数幂的位置,都有了以其为结尾的答案,那么线筛把不同的质数幂结尾组合起来就可以了。

    这样做还是非常慢的。。。优化一下常数,发现有很多 \(p^k\) 中的 \(k=1\) ,这时候答案其实是等比数列求和的形式,可以普通快速幂直接算,能省去 \(8\)(?) 的常数,还是非常快的。

    20220401省选组总结

    高分秘诀:晚上早点睡,早餐要吃好,QQ别打开。
    (话说rp暴涨是不是因为早上吃了八宝粥 /jk )
    呜呜呜讨论时还被cue了。

    T1

    题意相当于用一条链将 dfs 树切成大小相同的两半。
    嗯。。直接想找中位数一样往下就好了。
    想到之后大约比赛开始1.5h,周围的人还在这题的数据范围游荡,心里有点小慌是不是看错题了,
    不然不可能就我会做呀?
    反复确认后才敲了。

    T2

    ???奇怪的题目增加了。
    一开始真的以为随机函数会有什么特别的性质,
    转念一想,这样子的随机函数见过好多好多了吧,可能真的没有什么性质。
    好,既然它随机,那我也随机,跳吧。
    于是第一次看时盯了一小会儿就跳过了,最后半个钟左右回来写了个随机。
    (真应该好好看时限的没准能水多几分)
    正解是把 \(G_1\) , \(G_2\)\(N/3\) 位相同的弄出来,\(G_3\)\(G_4\) 同理,这样就不用理前面的了。
    然后把这些拼到一起,就是找相同的合并。

    T3

    一开始的担心是正确的,
    只不过是 T3 看错了而非 T1。
    一开始以为是“左侧”同一高度的所有积木,中间可以有空,想了好久硬是连样例都想不明白,一度怀疑样例给错,
    然后看了眼 QQ 群,发现没有修改题面?那就回来再好好读题。
    嗯。。。这时候才知道只会推动相邻积木,离结束不足 1h。
    迅速 rush 50pts 的部分分,寻思着也没多长时间了就去看 T2 ,没有死磕在这题上。
    结果是悲哀的,不开 long long 见祖宗。\(50pts \rightarrow 22pts\)

    正解把每个积木换成点,做成图论题了,分别考虑每块空地能填的积木个数,连向最近的那些点,边权是移到该处的代价。
    埋在当地的情况每次是花费 \(2\) 的。
    考虑到实际上很多点是没有用的,只会整块被移动或者埋到当地,这些点可以缩在一起。
    这样边数和点数都是 \(O(n)\) 的,跑一下最短路可以得到答案。

    20220405省选组总结

    《关于AK场疯狂挂题这档子事》

    T1

    拆一下式子可以得到一个除 \(k\) 上取整相关的式子,数论分块分别处理每个 \(h_i\)
    这里分块完是要排序的,一开始直接 sort 觉得非常不稳,于是用上堆归并排序。
    最后还是挂分了(裂),一个是答案上界设小了,一个是算答案时没用排序后的数组,而是用了原本没排序的(别问我为啥这还有 70pts )。

    T2

    ?只有我是在算体积并的吗?

    容斥一下,每个三元组的贡献就是三个长方体的并,要求全部并起来。

    那就先拆成 \(3n\) 个长方体,然后计算体积。用扫描线变成二维问题,然后就是一个 前缀最值修改-全局求和 的问题。
    一开始没有注意到是前缀修改所以写了吉司机线段树,后面调不出来注意到是前缀,改成了直接 set 硬刚?

    T3

    假爆啦!
    赛时想歪了觉得是道SB题,赛后才知道做法有大锅。

    如果没有两行的情况,其实就是一个贪心,上下行独立。
    那一个自然的想法就是在 \(O(n^2)\) DP 的基础上进行优化,将一些单行的贡献一次性计算。
    由此可以发现很多状态是没有作用的。
    对于第一行用了 \(i\) 格时,只用记录第二行不长于它时的最大贡献和最早位置,第二行同理。
    转移比较简单。

    20220407省选组总结

    可以预见到这套题被喷爆……
    两个板子一个暴力……

    T1

    先转化成每次从一堆取一些数扔到下一堆,最后面是一个垃圾桶,不能扔的输。

    那么发现距离垃圾桶长度是偶数的都是垃圾桶,因为一个人将其取出来,另一个人一定可以把它扔回去,
    剩下的奇数格就是 Nim 游戏,异或和经典结论。

    T2

    暴力碾标算(雾

    一个比较优秀的 \(O(q \log n)\) 做法,但是很多状态都会被剪掉。
    把树按照DFS序压到序列上,直接线段树维护区间最小值最大值,已经没有被删的数个数。
    每次之间删去一段区间中深度不大于 \(dep_x + y\) 的点,跑得还是比较优秀的(

    T3

    这种题啊……真的板子……模拟赛出什么根号数据结构呀……

    树上莫队,询问放到括号序上做,将颜色分块做到 \(O(1)-O(\sqrt n)\)
    要特殊处理 \(lca\) ,不过那是细节问题了。

    20220409省选组总结

    明早晨跑(flag

    T1

    不难?
    直接算不好算,考虑用总方案数减去有两个重心的方案数,此时深度较低的一个重心子树大小必定为 \(\frac n 2\)
    那么要算的其实就是将一个子树接到另一个地方后,使某个点的子树大小变为 \(\frac n 2\) 的方案数。
    我想的是枚举这个子树大小为 \(\frac n 2\) 的点,计算将其他子树接过来的方案数,
    需求/提供 大小不同的节点显然是不会相互影响的,那么把相同的点放在一起做,树状数组直接搞一下就行。
    特殊的点在于原图有两个重心,这里推一推也很好做。
    这是 \(O(n \log n)\) 的,稍微剪剪枝可以碾过去,跑得比 \(O(n)\) 要快。

    T2

    确定了数集后,排序方式是全序的,对其排序即可。
    排序方式为 \(cmp(A,B) = [A+B>B+A]\) ,其传递性可以考虑该比较的实质为字符串的自循环的比较。
    然后考虑每个数的贡献,
    \(cmp(A,B)=0\) 排序后在 \(x\) 前面的数都有可能给 \(x\) 贡献,
    那么记 \(f_{i,j}\) 为当前时刻第 \(i\) 个集合,长度为 \(j\) 的数的个数,注意这里记录的只有在 \(x\) 前的数,
    特别地, \(f_{i,0}\) 为第 \(i\) 个集合中在 \(x\) 后的数的个数。
    \(F_i(x)\)\(f_{i,j}\) 的生成函数。
    这样其 \(x\) 的贡献就是 \(x \sum_{j \ge 0} 10^j \left( [x^j] \prod_{t!=i} F_t(x) \right)\)
    仔细观察式子,发现 \(10^j\) 可以带到 \(x^j\) 里,只需 \(x \leftarrow j\) 即可。
    那么直接维护乘积即可,由于可能构造出 \(0\) ,需要另外处理一下。

    T3

    简单题,就是难写。
    简单LCT,简单维护,码量约 7-8k 。

    20220410省选组总结

    下午打球好累好累……虽然没有上场……

    考场写的 ? + 30 + 52

    结果 T1 结论假了真没分,T2 不知道为啥暴毙了,T3 直接 MLE ,算的时候没感觉会 M ,说明计算空间需要再多加仔细观察数组?
    但是其实这个不能改 Path 又没有虚拟机就很淦。

    T1

    考场的结论真的假,但觉得这道题不会有什么进度,就直接写了跳过。
    其实下次可以打个暴力先。
    首先答案一定是 \(n\)\(m\) 的约数,其次每次优先填向右的。
    可以保证这样是最优的,
    若全部字符相同显然可以拼成,
    考虑如果可以向右但选择了向下的话,右侧的点就必有一个与开头不同的位置无法被覆盖。

    T2

    就很淦!
    想到了后半的一部分但是不会用长剖求……
    同时那个公式连通块个数=点数-边数确实印象不够深刻。
    应当正确认识这一公式的实用性。
    (是不是应该开一个文档记一下这些常用的公式?)

    T3

    M了……
    赛时打了前三档,不会在线维护答案。
    但是把前几个部分分加起来空间直接爆掉了。
    好吧我是傻子不知道可以离线呜呜呜。

    实边:new;虚边:copy

    当求一个点的度数时,考虑与其相连的点有哪些:

    1. 该点和该点的一些(虚边)祖先实边连出的点及其子树,要求连出的点时间小于当前点时间。
    2. 虚边上的最浅祖先(根)连向的子树。

    如何做到 \(O(n \log n)\) 维护。
    离线只是为了方便建树,确保 DFS 序的性质,这里我们还是按照时间顺序维护。

    1. 这种贡献一定是 \(\text{点} \rightarrow \text{根} \rightarrow \text{根的父亲} \rightarrow \text{子树}\) 的。
    2. 每次的贡献只记成某个点存在的形式,区间查询子树内已出现的点个数。

    这个树状数组可以很方便地维护。

    20220413省选组总结

    暴力党大获全胜!
    讲真我没怎么努力写暴力。
    这 T1 能优化的但是最后不够时间了。
    T2 第一档暴力分觉得复杂度不太对就根本没写。

    T1

    T2

    特殊情况下证明四色定理?
    比较有意思的构造。

    考虑 \(k=5\) 时怎么做,每次往一个已经染好色的图中加入一个点,
    令这个点是 \(x\) 坐标最大中 \(y\) 坐标最大的一个。
    那么它连出去的点至多只有 \(4\) 个,直接染色即可。

    然后由此思考 \(k=4\) 的情况。
    我们希望把其中一个相邻点变色,让当前点得到一个可用的颜色。
    一种有效的做法是,设相邻的四个点颜色为 \(c_1\) , \(c_2\) , \(c_3\) , \(c_4\) (顺序是以当前点为原点的极角排序?),如果改变一个点的颜色,则它相邻的的颜色也会需要修改,
    那么尝试修改 \(c_1\) ,如果它会导致 \(c_3\) 也改变就不是我们想要的,此时一定可以修改 \(c_2\)
    每次修改我们让 \(c_1 \rightarrow c_3\) , \(c_3 \rightarrow c_1\) ,改色的必要条件是相邻点中有改色后与当前点相同的。
    这样相当于找颜色为 \(c_1\)\(c_3\) 交替的从 \(c_1\) 开始的增广路。
    由平面图的性质可知,不存在 \(c_1\) 影响 \(c_3\) 同时 \(c_2\) 影响 \(c_4\) 的情况,
    因为其颜色保证两条增广路不交,
    但起点终点的位置决定了一定会有交。

    T3

    树剖板子

  • 相关阅读:
    burp用命令行一键启动出现错误“a java exception has occurred”的解决
    fofa语法
    使用LaZagne获取各种密码
    获取网站ico图标以及使用shodan的http.favicon.hash方法搜同ico站点
    使用nmap-converter.py整理nmap导出的xml记录为xls文件
    使用wafw00f工具识别waf类型
    反射型XSS中的POST型复现
    锐捷统一上网行为管理与审计系统信息泄露漏洞复现(CNVD-2021-14536)
    软件工程 数组
    c语言4
  • 原文地址:https://www.cnblogs.com/Kelvin2005/p/15947928.html
Copyright © 2020-2023  润新知