3月CF杂题

Codeforces Round 853 (Div. 2)

打的 VP。

E. Serval and Music Game

妙妙题。枚举 \(x\),思考如何快速计算 \(f(x)\) 的值。

对于 \(x\)\(s_n\) 因数的情况,有 \(\left\lfloor\frac{s_n}{x}\right\rfloor=\left\lceil\frac{s_n}{x}\right\rceil=\frac{s_n}{x}\)。令 \(k=\frac{s_n}{x}\),则 \(s_i=(p_i+q_i)k\),相当是求 \(s_i\) 里面有几个是 \(k\) 的倍数。记 \(t_i=\gcd(s_i,s_n)\),因为 \(k\) 一定是 \(s_n\) 的因数,也要是 \(s_i\) 的因数,那么 \(k\) 一定是 \(t_i\) 的因数,可以转化成求有几个 \(t_i\)\(k\) 的倍数。根据定义可知 \(t_i\)\(s_n\) 的因数,考虑枚举 \(s_n\) 的因数来计算答案。这种情况最多出现 \(\sqrt s_n\) 次,每次枚举是 \(\sqrt s_n\) 的,总时间复杂度 \(\mathcal{O}(s_n)\),预处理 \(\gcd\)\(\mathcal{O}(n\log s_n)\)(应该可以基于值域快速预处理)。

对于 \(x\) 不是 \(s_n\) 因数的情况,有 \(\left\lfloor\frac{s_n}{x}\right\rfloor+1=\left\lceil\frac{s_n}{x}\right\rceil\)。令 \(k=\left\lfloor\frac{s_n}{x}\right\rfloor\),则 \(s_i=(p_i+q_i)k+q_i\)。此时有一个重要的性质:一个数 \(s_i\) 不能被表示出来当且仅当 \(s_i\bmod k>\left\lfloor\frac{s_i}{k}\right\rfloor\)。证明如下:假如一个数 \(s_i\bmod k>\left\lfloor\frac{s_i}{k}\right\rfloor\),那么有 \(q_i\bmod k=s_i\bmod k>\left\lfloor\frac{s_i}{k}\right\rfloor\ge\frac{s_i}{k+1}\ge q_i\),矛盾;假如已经有 \(s_i\bmod k\le\left\lfloor\frac{s_i}{k}\right\rfloor\),可以这样构造:\(q_i=s_i\bmod k,p_i=\left\lfloor\frac{s_i}{k}\right\rfloor?q_i\)

所以我们可以通过减去 \([1,k-1],[k+2,2k-1]\ldots[(i-1)k+i,ik-1]\ldots[(k-2)k+(k-1),(k-1)k-1]\) 这些区间内的数来计算 \(f(x)\)。可以证明这样是 \(\mathcal{O}(s_n)\) 的:当 \(k\le\sqrt s_n\) 时,区间至多会有 \(k-1\) 个;当 \(k>\sqrt s_n\) 时,\(\left\lfloor\frac{s_n}{k}\right\rfloor\le\sqrt s_n\),故区间不会超过 \(\sqrt s_n\) 个。而不管是哪种情况,\(k\) 的取值都不会超过 \(\sqrt s_n\) 种,故总时间复杂度为 \(\mathcal{O}(s_n)\)

F. Serval and Brain Power

妙妙题 +1。

\(k\ge5\) 的情况,我们把整个序列分成 5 段,那么 T 一定是至少一段的子序列(不懂可以手玩一下)。枚举每一段的子序列,查找 S 内包含个数,时间复杂度 \(\mathcal{O}(5\times2^{\frac{|S|}{5}}\times|S|)\)。对于 \(k<5\) 的情况,我们只用考虑 \(k=2\)\(k=3\)(因为 \(k=4\) 包含在 \(k=2\) 里面)。枚举断点把 S 分成 \(k\) 段,对这 \(k\) 段求 LCS 即可。\(k=3\) 时时间复杂度为 \(\mathcal{O}(w\times|S|^{5})\),其中 \(w\) 是一个极小的常数。

证明一下 \(w\) 的大小。考虑以下问题:求排列 \(n\) 个白色球和 5 个黑色球的方案数。白球表示字符串的字母,第 2、4 个黑球表示我们将字符串分成 3 部分的位置,第1、3、5个黑球表示我们在 DP 中枚举转移的位置。因此,在球的顺序和所有 DP 状态之间有一个映射。球的顺序数为 \(\dbinom{n+5}{5}\),因此 \(w=5!=\frac{1}{120}\)(实际上我们还没有计算分割成空串的情况,所以 \(w\) 甚至比这个小一点)。

Codeforces Round 857 (Div. 2)

md ,忍不了了,一拳把像马奇诺防线一样坚固的 pretest 打爆。

图片来源:我也不知道。

C. The Very Beautiful Blanket

题意:让你构造一个 \(n\times m\) 的矩阵,满足矩阵内不同元素数量最多,且对于其任意一个 \(4\times 4\) 的子矩阵 \(a\),满足:

\[a_{1,1}\oplus a_{1,2}\oplus a_{2,1}\oplus a_{2,2}=a_{3,3}\oplus a_{3,4}\oplus a_{4,3}\oplus a_{4,4} \]

\[a_{1,3}\oplus a_{1,4}\oplus a_{2,3}\oplus a_{2,4}=a_{3,1}\oplus a_{3,2}\oplus a_{4,1}\oplus a_{4,2} \]

\(n,m\le200\)

瞪眼可得最多种类为 \(n\times m\)。有一种简单的构造方式:\(a_{i,j}=i\times2^{32}+j\)

E. Music Festival

题意:有 \(n\) 个数组,第 \(i\) 个里面有 \(k_i\) 个元素。现在让你把 \(n\) 个数组以任意顺序连接起来,使得得到的新数组价值最大。定义长度为 \(m\) 的数组 \(a\) 的价值为 \(\sum\limits_{i=1}^m(a_i>\max\limits_{j=1}^{i-1}a_j)\)\(n,\sum k_i\le2\times10^5\)

定义 \(\text{lim}_i\) 表示 \(\max\limits_{j=1}^{k_i}a_{i,j}\),显然我们这样可以使得到的价值最大:先按 \(\text{lim}_i\) 从小到大排序,再从中选取一些数组连接,最后把其余的放到最后。因为你任意排列得到的答案中,有贡献的子结构一定会在这样构造的方案中出现。注意这里我们只是确定了会产生贡献的数组的相对顺序,并不是答案一定是这样排列的。比如这种情况:

定义 \(f_i\) 表示当前选择的结尾为第 \(i\) 个数组的最大贡献,有转移方程 \(f_i=\max\limits_{j=1}^{k_i}(\max\limits_{l=1}^{i-1}f_l+cnt_{i,j})\),其中 \(cnt_{i,j}\) 等于 \(\sum\limits_{x=j}^{k_i}(a_{i,x}>\max\limits_{y=1}^{x-1}a_{i,y})\)。显然最大值可以线段树维护。

upd:傻逼了,这个直接记一个前缀最大值就行了,根本不需要线段树。

F. The way home

题意:给一个有向图,每条边需要一定的钱。你可以在第 \(i\) 个点卖艺来赚取 \(w_i\) 块钱。初始在节点 1,身上有 \(p\) 块钱,要去往节点 \(n\),求最小卖艺次数。\(n\le800,m\le3000,p,w_i\le10^9\)

因为卖艺没有次数限制,我们卖艺一定是在沿途 \(w\) 最大的地方。定义 \(f_{i,j}\) 表示从 1 走到 \(i\),且沿路经过的 \(w\) 最大的节点为 \(j\) 的最少卖艺次数和最大剩余钱数。从 1 跑一遍 dijkstra ,如果去下一个点的钱不够就在 \(j\) 卖艺。记得更新 \(j\) 的值(注意我们应该先卖艺再更新,因为你的钱还不够到达下一个点)。

Codeforces Round 858 (Div. 2)

VP 罚时吃饱饱。

C. Sequence Master

题意:给定一个长为 \(2n\) 的数列 \(a\),你需要构造一个长为 \(2n\) 的数列 \(b\)(正负没有限制),满足把 \(b\) 任意分成大小为 \(n\) 的两组,都有其中一组的乘积等于另一组的和。求最小的 \(\sum\limits_{i=1}^{2n}\left|a_i-b_i\right|\)

手玩可以发现只有如下情况:

  • 全是 0;

  • \(n=1\) 时全为一个数;

  • \(n=2\) 时全为 2;

  • \(n\) 为偶数时有一个 \(n\)\(2n-1\) 个 -1。

D. DSU Master

题意是最大障碍。

题意:

E. Tree Master

题意:一棵大小为 \(n\) 的树,\(i\) 的点权为 \(a_i\)\(q\) 次询问,给定 \((x,y)\),求 \(\sum\limits_{i=0}^{d_x}a_{p_{x,i}}*a_{p_{y,i}}\),其中 \(d_x\) 表示 \(x\) 的深度,\(p_{x,i}\) 表示 \(x\)\(i\) 级祖先,保证 \(d_x=d_y\)\(n,q,a_i\le10^5\)

暴力怎么做?直接模拟这个过程。直接记忆化需要 map 或 hash,会被卡,考虑随机记忆化一部分答案。我的方法是只记录 \(x\) 是 400 倍数的 \((x,y)\) 的答案,题解是只记录满足与 \((x,y)\) 同样深度的点数不超过 \(\sqrt n\) 的点对的答案。

Educational Codeforces Round 145 (Rated for Div. 2)

\(s_{i+1}\) 打成 \(s_{i-1}\),罚时吃饱饱。

D. Binary String Sorting

题意:给一个 01 串,有两个操作:花 \(10^{12}\) 的代价交换相邻两数,花 \(10^{12}+1\) 的代价删除一个数。求让这个串单调不减的最小代价。\(n\le3\times10^5\)

最后的序列是一个前 0 后 1 的形式,考虑枚举 01 分界点,交换产生的位移至多为 1(因为大于 1 时不如删),且两边的多余的数肯定是直接删最划算。故枚举是否交换,答案直接算。复杂度 \(\mathcal{O}(n)\)

E. Two Tanks

题意:有两个容量为 \(a,b\),初始水量为 \(c,d\) 的水箱,有 \(n\) 次形如从一个往另一个倒水的操作,求对于所有的 \(0\le c\le a,0\le d\le b\),求出操作后第一个水箱中剩的水量。\(n\le10^4,a,b\le10^3\)。注:假设现在两水箱分别有 x,y 的水,当次操作为“从 1 向 2 倒 \(z\) 的水”,则实际倒水量为 \(\min(x,b-y,z)\)

因为水不会溢出,考虑枚举 \(s\) 表示水的总量。发现对于一些 \(c=i,d=s-i\) 的情况,假如它们在某次操作后 1 被倒空或倒满,则最后答案相同,故显然对于所有 \(c+d=s\)\(c,d\),答案画成函数是这样的:

其中 \(L,R\) 表示 1 中水量的上下界,\(lb,rb\) 是函数的分界点,它们可以直接模拟过程计算。时间复杂度 \(\mathcal{O}(n(a+b))\)

F. Traveling in Berland

题意:\(n\) 个点的环,从 \(i\)\((i+1)\bmod n+1\) 耗油 \(a_i\),单位价格为 \(b_i\),油箱容量为 \(k\),初始为空,求每个点作为起点和终点的最小代价。\(n\le2\times10^5,a_i\le k,1\le b_i\le2\)

Codeforces Round 861 (Div. 2)

C. Unlucky Numbers

题意:定义一个数的幸运值为其最大的一位数码与最小的之差。求 \([l,r]\) 里最不幸的数。\(l,r\le10^{18}\)

如果 \(l,r\) 数位不同,则一定可以取到幸运值为 0;反之,考虑枚举幸运值和每位数的取值范围,类似数位 dp 那样求一下即可。

D. Petya, Petya, Petr, and Palindromes

题意:定义数组的代价为使其变成回文串的最小改动次数,求数列 \(a\) 的所有长度为 \(k\) 的子串的代价。\(n,k,a_i\le2\times10^5\)\(k\) 是奇数。

正难则反。对于 \(i<j\)\((i,j)\) 不会产生代价当且仅当 \(\begin{cases}a_i=a_j\\i\equiv j\pmod2\\j-i+1\le k\\ \frac{k+1}{2}\le\frac{i+j}{2}\le n-\frac{k+1}{2}+1\end{cases}\),可以直接计算。

E1. Minibuses on Venus (easy version)

题意:一个长度为 \(n\)\(a_i\in[0,k-1]\) 的数组 \(a\) 是好的当且仅当存在 \(i\) 满足 \(a_i\equiv\sum\limits_{j=1\land j\neq i}^na_j\pmod k\),求有多少个长度为 \(n\) 的好的 \(a\) 数组,答案对质数 \(m\) 取模。\(n\le1000,k\le30,10^8\le m\le10^9+7\)

条件等价于 \(2a_i\equiv\sum\limits_{j=1}^na_j\pmod k\),枚举 \(a_i\) 和总和的值,定义 \(f_{i,j,0/1}\) 表示前 \(i\) 位和为 \(j\),是否用了 \(a_i\) 的值,答案就是 \(\sum f_{n,j,1}\)。时间复杂度 \(\mathcal{O}(nk^3)\)

posted @ 2023-03-07 09:37  xx019  阅读(57)  评论(0编辑  收藏  举报