邻间的骰子之舞
最初有 个字符的文本,可以进行若干次操作,每次操作都是以下两种之一:复制所有字符到剪切板(花费 )与将剪切板内的内容粘贴到文本末尾(花费 )。求让文本长度大于 所需要进行的最小花费。
采用暴力与分类讨论乱搞。
对于 的情况,我们一直复制+粘贴倍增即可,时间复杂度 ,理论获得 分,实际由于好渴鹅写挂了这一部分一分都没有。
对于 的数据,采用暴力 dp。令 表示为当前文本已经有 个字符、剪切板里面有 个字符,达到该目标所需要花费的最小值,那么很显然初始状态 ,因为最开始肯定要复制一次。
考虑如何进行转移。不难发现有两种情况:重新复制当前文本并粘贴或直接粘贴之前复制的文本,因此转移方程有
此做法可以拿到另外 分。好渴鹅考虑到有很多 dp 状态实际上是没有用的(即无法达到),而这些没有用的状态也不会影响后面的转移,因此可以拿一个队列只将需要转移的状态放进去,这样子可能能骗到更多分(类似于 Bellman-Ford 的队列优化 SPFA)。
但是由于好渴鹅不知道为什么最后写挂了因此本题一分都没有,柠檬熟了。
星海浮沉录
有一个长度为 的非负整数序列 ,第 个数是 。现如今给出 个操作需要执行,每一次操作都是以下两种操作之一:
- :将 与 互换值;
- :求出长度不小于 的连续子序列的最小 值。其中,一个序列的 是这个序列中不存在的最小非负整数。
对于每一个操作 ,输出结果。
还是采用暴力。首先操作 非常好搞,直接 swap 翻转以下两个值就行了,大部分的暴力时间复杂度瓶颈都是在查询操作而非修改操作上。
对于操作 ,我们首先不难想到 的单次查询时间复杂度,也就是枚举左边界,然后准备一个装满 所有元素的 set,将左边界往右 个元素的值从 set 里面删掉,最后剩下的最少元素就是这个左边界对应的 值。但是这样子做总最坏时间复杂度达到了 ,需要考虑优化。
不难发现从 到 只是多个一个元素且少了一个元素的区别,因此我们不如考虑每次将上个区间的左边界对应的值从 set 中加回来,这样或许就能优化?不完全对,因为一个区间内的单个元素可能会出现多次,如果单纯地使用 set 的话加回来的话万一后面又删掉了怎么办。
因此我们还有拿一个 map 来辅助它。map 的键值 对应着 被删除了多少次,删掉就加一,反之就减一。当 的对应值 在一次操作过后大于 了就把这个值从 set 当中删掉;当 , 就将这个值补回去。
这样子我们的总时间复杂度就来到了 ,成功获得 分。
后记:偶然听到另一种 set 暴力方式过了,当场气得晕厥。
勾指起誓
有 个选手参加 场考试,每次考试都只有一道题。给出 矩阵 ,第 行第 个元素表示在第 场考试中第 个人是是否能答对题目。
每次考试都可能会淘汰某一些人。当这次考试的所有选手不是全部都能答对或全部都不能答对,那么没有答对的人就会淘汰,剩下答对的人就会继续比赛;否则没有人被淘汰,所有人都晋级。
现在对于每一个人 ,求有多少种排列能够使得第 个人能够成为最终的胜者(即没有被淘汰的人)。答案对 取模。
还是采用暴力。使用库函数 next_permutation 生成每一种可能的排列。然后再来一遍 一遍求出在该种排列下获胜的人并将其统计进答案。时间复杂度 ,成功获得 分。
第八交响曲「千日同升」
Yoimiya 有一台机器,这台机器可以对一个序列 进行操作,且只支持一种操作:
- :如果 ,交换 的值;否则不做任何操作。其中 。
进行一次这个操作耗时 单位时间。
此外,这台机器还可以同时并行地执行多个操作。
具体来说,Yoimiya 可以同时给出 对 ,且满足 ,, 互不相同(即每个 只会在至多一个操作 中被涉及到)。然后这台机器会同时对每个 执行 。
这台机器可以同时并行执行任意多个操作;不管并行执行了多少次操作,耗时均为 单位时间。
给定正整数 。现在 Yoimiya 希望你帮她写一段程序,使得当任意长为 的排列作为输入时,用这台机器执行完这段程序后得到的排列均为 。
此外,Yoimiya 还希望这段程序的耗时不能太大,具体见评分标准。
没有完全看懂题目,没有任何头绪,代码都没有提交,文件夹都没有创建, 分。