题目:2024.11.14 题目

邻间的骰子之舞

最初有 个字符的文本,可以进行若干次操作,每次操作都是以下两种之一:复制所有字符到剪切板(花费 )与将剪切板内的内容粘贴到文本末尾(花费 )。求让文本长度大于 所需要进行的最小花费。


采用暴力与分类讨论乱搞。

对于 的情况,我们一直复制+粘贴倍增即可,时间复杂度 ,理论获得 分,实际由于好渴鹅写挂了这一部分一分都没有。

对于 的数据,采用暴力 dp。令 表示为当前文本已经有 个字符、剪切板里面有 个字符,达到该目标所需要花费的最小值,那么很显然初始状态 ,因为最开始肯定要复制一次。

考虑如何进行转移。不难发现有两种情况:重新复制当前文本并粘贴或直接粘贴之前复制的文本,因此转移方程有

此做法可以拿到另外 分。好渴鹅考虑到有很多 dp 状态实际上是没有用的(即无法达到),而这些没有用的状态也不会影响后面的转移,因此可以拿一个队列只将需要转移的状态放进去,这样子可能能骗到更多分(类似于 Bellman-Ford 的队列优化 SPFA)。

但是由于好渴鹅不知道为什么最后写挂了因此本题一分都没有,柠檬熟了。

星海浮沉录

有一个长度为 的非负整数序列 ,第 个数是 。现如今给出 个操作需要执行,每一次操作都是以下两种操作之一:

  • :将 互换值;
  • :求出长度不小于 的连续子序列的最小 值。其中,一个序列的 是这个序列中不存在的最小非负整数。

对于每一个操作 ,输出结果。


还是采用暴力。首先操作 非常好搞,直接 swap 翻转以下两个值就行了,大部分的暴力时间复杂度瓶颈都是在查询操作而非修改操作上。

对于操作 ,我们首先不难想到 的单次查询时间复杂度,也就是枚举左边界,然后准备一个装满 所有元素的 set,将左边界往右 个元素的值从 set 里面删掉,最后剩下的最少元素就是这个左边界对应的 值。但是这样子做总最坏时间复杂度达到了 ,需要考虑优化。

不难发现从 只是多个一个元素且少了一个元素的区别,因此我们不如考虑每次将上个区间的左边界对应的值从 set 中加回来,这样或许就能优化?不完全对,因为一个区间内的单个元素可能会出现多次,如果单纯地使用 set 的话加回来的话万一后面又删掉了怎么办。

因此我们还有拿一个 map 来辅助它。map 的键值 对应着 被删除了多少次,删掉就加一,反之就减一。当 的对应值 在一次操作过后大于 了就把这个值从 set 当中删掉;当 , 就将这个值补回去。

这样子我们的总时间复杂度就来到了 ,成功获得 分。

后记:偶然听到另一种 set 暴力方式过了,当场气得晕厥。

勾指起誓

个选手参加 场考试,每次考试都只有一道题。给出 矩阵 ,第 行第 个元素表示在第 场考试中第 个人是是否能答对题目。

每次考试都可能会淘汰某一些人。当这次考试的所有选手不是全部都能答对或全部都不能答对,那么没有答对的人就会淘汰,剩下答对的人就会继续比赛;否则没有人被淘汰,所有人都晋级。

现在对于每一个人 ,求有多少种排列能够使得第 个人能够成为最终的胜者(即没有被淘汰的人)。答案对 取模。


还是采用暴力。使用库函数 next_permutation 生成每一种可能的排列。然后再来一遍 一遍求出在该种排列下获胜的人并将其统计进答案。时间复杂度 ,成功获得 分。

第八交响曲「千日同升」

Yoimiya 有一台机器,这台机器可以对一个序列  进行操作,且只支持一种操作:

  • :如果 ,交换  的值;否则不做任何操作。其中 

进行一次这个操作耗时  单位时间。

此外,这台机器还可以同时并行地执行多个操作。

具体来说,Yoimiya 可以同时给出  对 ,且满足 , 互不相同(即每个  只会在至多一个操作  中被涉及到)。然后这台机器会同时对每个  执行 

这台机器可以同时并行执行任意多个操作;不管并行执行了多少次操作,耗时均为  单位时间。

给定正整数 。现在 Yoimiya 希望你帮她写一段程序,使得当任意长为  的排列作为输入时,用这台机器执行完这段程序后得到的排列均为 

此外,Yoimiya 还希望这段程序的耗时不能太大,具体见评分标准。


没有完全看懂题目,没有任何头绪,代码都没有提交,文件夹都没有创建, 分。