加星号表示看了题解。

摆烂的十月份。

P1709 [USACO5.5] 隐藏口令 Hidden Password *

题目链接

最小表示法模板题,设当前比较以 $i$ 和 $j$ 开头的字符串,则对两字符串一位一位向后比较,即每次比较 $i+k$ 和 $j+k$,直到遇到不同的字符,假设 $i$ 开头的字符串更小,则令 $j$ 直接跳到 $j+k+1$,因为对于以 $j$ 到 $j+k$ 开头的字符串,都有对应的以 $i$ 到 $i+k$ 开头的字符串必它小。时间复杂度 $O( n)$。

P6310 「Wdsr-1」仓库建设

题目链接

写过题解了,【题解】P6310 [Wdsr-1]仓库建设

武汉大学2023年新生程序设计竞赛(同步赛)

A. 教科书般的亵渎

题目链接

将 $a$ 从大到小排序,若第一项为 $0$ 或 $1$ 且后面每一项与前一项的差小于等于 $1$ 则为 $YES$,否则为 $NO$。

C. 覆叶之交

题目链接

给定三个矩形,求它们的面积并。

用容斥写,难点在代码实现。

E. 不是n皇后问题

题目链接

看着挺麻烦,实际上就是把 $1$ 到 $n^2$ 按顺序填进格子就行了。

J. 放棋子

题目链接

行和列可以分开计算,对于同一行,要使分数最大,则每次落子需要相连的旗子尽可能多,因此可以从左至右依次落子,这样就可以得到这一行的最大分数。可以证明,如果从第一行到最后一行操作也可以得到列的最大分数。时间复杂度 $O(n\times m)$。

K. 矩形分割

题目链接

显然我们想要分割出来的正方形边长尽可能大,所以以矩形的短边为正方形边长进行分割直到无法分割,如果还剩下来一个小矩形,就再对这个矩形进行上述操作,直到分割完全。

L. 小镜的数学题

题目链接

从 $x$ 向后暴力找,最坏也不会超过 $2x$,数据比较水就过了。

P2017 [USACO09DEC] Dizzy Cows G

题目链接

给定一个图,有无向边和有向边,给每条无向边指定一个方向,并且不出现环。

考虑拓扑排序判定有向无环图的过程,每次删去出度为 $0$ 的点,若最终能删完则为有向无环图,可以发现,每条边都是由拓扑序大的指向拓扑序小的。因此在本题中先无视无向边对原图进行拓扑排序,再让无向边由拓扑序大的点指向拓扑序小的点,就得到了有向无环图。

2023 年华中科技大学程序设计竞赛新生赛(线上同步赛)

几乎每道题都会犯sb错误,我是超级罚时王。

P9769 [HUSTFC 2023] 简单的加法乘法计算题

题目链接

设 $f_i$ 表示从 $0$ 到 $i$ 的最小操作次数,考虑最后一次操作,要么是加上 $A$ 中的一个数,要么是乘上 $B$ 中的一个数,所以 $f_i=\min\{ \min\limits_{j=1}^n f_{i-A_j},\min\limits_{k=1}^m f_{i/B_k}\}$,加法用堆来维护,乘法一个个枚举,时间复杂度 $O(ym\log n)$,如果用单调队列可以降到 $O(ym)$。

P9771 [HUSTFC 2023] 排列排序问题

题目链接

显然切割出来的序列是单调的,并且相邻的两个数相差 $1$,按这个方法切割使每个切出来的序列尽可能大就行了。时间复杂度 $O(n)$。

P9774[HUSTFC 2023] 新取模运算

题目链接

显然新定义的运算符满足分配律,于是对于 $n$ 到 $1$ 这 $n$ 个数,可以分为是 $p$ 的倍数和不是 $p$ 的倍数分别计算,最后再相乘。

对于不是 $p$ 的倍数的数,它们对 $p$ 进行新定义运算等价于直接对 $p$ 取模,这一部分可以通过预处理 $1$ 到 $p$ 的阶乘来求解。

对于是 $p$ 的倍数的数,例如 $p,2p,3p…kp$,它们对 $p$ 进行新定义运算需要先除以 $p$,变为 $1,2,3…k$,这就成了原问题的子问题,于是可以递归求解,边界是 $ k<p$。时间复杂度 $O(\log_p n \times \log n)$。

P9775 [HUSTFC 2023] 广义线段树

题目链接

给定一棵 $2n-1$ 个节点的树,$1$ 是根节点,$n$ 到 $2n-1$ 是叶子节点,给定叶子节点的点权,其他节点的点权是以它为子树的所有叶子节点的乘积。令每个叶子节点乘上一个数,求最后所有节点的和。

对叶子节点乘上一个数,则从叶子节点到根节点路径上所有节点都要乘上这个数。所以原问题转化为对树上的一条链乘上一个数,可以用树链剖分,时间复杂度 $O(n\log^2 n)$。比赛时没细想,但实际上可以先对所有叶子节点做修改,再在 dfs 返回时向上传就可以了,时间复杂度 $O(n)$。

P9777 [HUSTFC 2023] Fujisaki 讨厌数学

题目链接

已知 $x^1+x^{-1}=k$,求 $x^n+x^{-n}$。

可以发现 $(x^a+x^{-a})(x^b+x^{-b})=x^{a+b}+x^{-(a+b)}+x^{(a-b)}+x^{-(a-b)}$。设 $f_n=x^n+x^{-n}$,可以得到 $f_{(a+b)}=f_a \times f_b-f_{(a-b)}$。因此,若 $n$ 是偶数,有 $f_n=f_{n/2}^2-f_0$,若 $n$ 是奇数,有 $f_n=f_{n/2}\times f_{n/2+1}-f_1$。

设 $n$ 在第一层,向下拆分得到第二层,第二层要么有一个数要么有两个数,考虑两个数的情况,这两个数一定相差 $1$,将它们向下拆分,第三层仍然是两个数,并且也是相差 $1$,可以证明每一层都至多两个数。每次拆分都除以 $2$,因此有 $\log n$ 层。可以用记忆化搜索,但是 $n$ 太大了,要用 $map$ 存,时间复杂度 $O(\log^2 n)$。

P9779 [HUSTFC 2023] 不定项选择题

题目链接

$n$ 道题一共有 $2^n$ 种情况,除去全都不选的情况,最坏情况是最后一次才试出来,即要试 $2^n-1$ 次。其实我是看样例猜出来的结论

P9780 [HUSTFC 2023] Azur Lane

题目链接

先考虑怎样使天数最小,一天内放置的喵箱等级是一个不上升序列,因此将序列划分为多个不上升序列,使每个序列尽可能大,就得到了天数最小的情况。

之后天数每增加一,就需要从已划分的序列中再划分出一个序列,同时使花费最少,显然天数靠前的喵箱越多花费就越多,因此我们希望喵箱尽可能放在后面,于是可以从第一天开始向后找到第一个序列长度大于 $1$ 的序列,将它划分出一个数,最后将答案加上天数增加导致前面喵箱增加的花费。时间复杂度 $O(n)$。

P9782 [HUSTFC 2023] A+B problem

题目链接

签到题,$26$ 进制加法。

菜就多练练