Logo zrl123456 的博客

博客

CF632(EDU9) 题解

...
zrl123456
2025-12-01 12:51:30
我咋啥也不会/ll

本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2025-08-07 20:59:10

:::::warning[约定] 除特殊规定外,本文章下所有数均限定在整数域。
:::::

A. Grandma Laura and Apples

:::::info[题目基本信息] 考察:数学。
题目简介:
小 B 在卖苹果,每个苹果 $p$ 元钱,现在她卖完了苹果,但是她年纪大了记性不好,忘了最开始有几个苹果,只知道有 $n$ 位顾客,每位顾客买走了当时所剩苹果的一半,如果当时苹果数为奇数那么她就会慈祥地送他们半个苹果(不花钱,同时她很清楚地记得有没有送每位顾客半个苹果)。
然后现在小 B 想要知道她应得多少钱,以便看看有没有顾客耍她。
数据范围:

  • $1\le n\le 40$
  • $2\le p\le 100,2|p$ ::::: 注意到 $2|p$,且根据题目,小 B 只可能卖出(送出除外)几个或者几个半苹果,所以最后结果能用整型变量储存。
    然后倒着推,边求出当时还有几个苹果,边求出后面一共得了多少钱,按题意模拟即可。
    时间复杂度为 $\Theta(n)$,空间复杂度为 $\Theta(n)$。

B. Alice, Bob, Two Teams

:::::info[题目基本信息] 考察:前缀和。
题目简介:
小 X 和小 K 在玩一个游戏。
场上有 $n$ 名战士站成一排,第 $i$ 名战士的战力为 $p_i$。
最开始小 X 先将 $n$ 名战士分成两队(A 队和 B 队),然后小 K 将这一排的一个前缀或后缀的战士进行操作,使得 A 队的去 B 队,B 队的去 A 队,A 队归小 X,B 队归小 K。
现在小 X 分好了队,小 K 想要使自己战队总战力尽量大,问最大值是多少。
数据范围:

  • $1\le n\le 5\times 10^5$
  • $\forall i\in[1,n],1\le p_i\le 10^9$ ::::: 提到前缀和后缀,我们便想到前缀和和后缀和,维护它们,然后枚举前缀和后缀的端点,依题意翻转前后缀,用前后缀和维护即可。 时间复杂度为 $\Theta(n)$,空间复杂度为 $\Theta(n)$。

C. The Smallest String Concatenation

:::::info[题目基本信息] 考察:排序,数学。
题目简介:
小 I 收到了 $n$ 个字符串 $\{s_n\}$,他想知道若把这些字符串按一定顺序拼成一个字符串,使这个字符串字典序最小,求这个字符串。
数据范围:

  • $1\le n\le 5\times 10^4$
  • $\forall i\in[1,n],1\le|s_i|\le 50$
  • $\displaystyle\sum_{i=1}^n|s_i|\le5\times 10^4$ ::::: :::::info[闲话] 你说的对,这个题很简单,但是我忘了邻项交换法。
    ::::: 运用邻项交换法,若两个字符串 $a$ 和 $b$ 进行比较,则若 $a+b<b+a$($+$ 在这里表示字符串拼接),则 $a$ 应在前面。 根据这个方式排序即可。 时间复杂度为 $\displaystyle\Theta(\sum|s|\log n)$(在这里 $\displaystyle\sum|s|=\sum_{i=1}^n|s_i|$,下同),空间复杂度为 $\displaystyle\Theta(\sum|s|)$。

D. Longest Subsequence

:::::info[题目基本信息] 考察:桶,数学。
题目简介:
小 A 收到了一个数列 $\{a_n\}$ 和一个数字 $m$。他想知道这个数列的子序列的最小公倍数不大于 $m$ 的条件下,子序列最长是多少,并给出这个子序列和它的最小公倍数。

  • 定义空序列的最小公倍数为 $1$。

数据范围:

  • $1\le n,m\le 10^6$
  • $\forall i\in[1,n],1\le a_i\le 10^9$ ::::: 注意到 $m\le 10^6$,所以我们可以给 $\{a_n\}$ 中的数开桶,然后统计通过调和级数统计能整除每个数的 $\{a_n\}$ 中的数的个数,然后统计答案即可。 :::::info[闲话] 写的时候一时忘了调和级数叫什么在 HL 群中问了下。
    ::::: 时间复杂度为 $\Theta(m\log m)$,空间复杂度为 $\Theta(n+m)$。 :::::warning[坑点] 注意到求的是最小公倍数,因此统计答案时应该取最小的满足条件的数。
    同时我们要把初始最小值设成负数,以免出现空序列的情况。
    同时注意到 $a_i\le 10^9$,所以需要特判 $a_i>m$。
    :::::

E. Thief in a Shop

:::::warning[咕咕咕] FFT 不会,咕了。
:::::

F. Magic Matrix

:::::info[题目基本信息] 考察:最小生成树。
题目简介:
小 Z 收到一个 $n\times n$ 的矩阵 $a$,他想知道这个矩阵 $a$ 符不符合以下条件:

  • $\forall i\in[1,n],a_{i,i}=0$
  • $\forall i,j\in[1,n],a_{i,j}=a_{j,i}$
  • $\forall i,j,k\in[1,n],a_{i,j}\le\max(a_{i,k},a_{k,j})$

数据范围:

  • $1\le n\le 2500$
  • $\forall i,j\in[1,n],0\le a_{i,j}\le 10^9$ ::::: 三个条件中的前两个非常好维护,第三个条件需要优化。
    考虑建图(通过观察标签易得),在 $i$ 和 $j$ 之间连边权为 $a_{i,j}$ 的边,然后注意到 $a_{i,j}\le\max(a_{i,k},a_{k,j})$,其实就指 $i$ 和 $j$ 之间不通过边权小于 $a_{i,j}$ 联通。
    所以我们考虑到应用 Kruskal 进行求解,枚举每一坨 $a_{i,j}$ 相等的边,这一坨一起判断,一起加边即可。 时间复杂度为 $\Theta(n^2\log n^2)$,空间复杂度为 $\Theta(n^2)$。 :::::warning[坑点] 注意到 $n\times n$ 有 $6.25\times 10^7$,相当于每秒至少要读 $1.25\times 10^7$ 个数,因此不要使用 scanf
    :::::

评论

暂无评论

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。