11.26 模拟赛

复盘

T1。好难好难。先写了 \(\mathcal O(n^2)\) DP,但是没有任何前途。

尝试瞎推式子瞎猜性质。过了很久发现想得太复杂了。2h 过大样例。对拍。

T2。发现有 \(20\) 分很容易。这两个性质怎么做?

然后想性质时发现会正解了。好激动,赶紧写。

虽然细节挺多但是基本没调。T2 用了不到 1h。看起来大样例挺强就不对拍了。

T3 没任何思路。先把暴力写了看 T4。

T4 好神奇,竟然下发了 checker.cpp(虽然我不会用)。

直接模拟冒泡排序就能拿到 \(10\) 分。先写了。

发现还有 1h。想 T3 还是 T4?

算了想 T4 吧,这么有趣的题很少见。

尝试 \(n=8\)。发现可以拆成两个 \(n=4\)\(n=4\) 的方法样例给了,用 \(4\) 步。但是怎么合并?

仿照归并排序肯定不行。

然后又是瞎试了一会,发现有个很简单的用 \(4\) 步合并的方法。这样 \(n=8\) 就能做到 \(8\) 步。能得 \(8\) 分……?太赚了太赚了。继续想别的测试点。

\(n=13\) 质数肯定不好做。\(n=16\)?这不跟上面一样,拆成两个 \(n=8\) 的,然后再用 \(8\) 步合并?

\(n\)\(2\) 的幂的是不是都能这样做。算一下……总共 \(26\) 分!

因为给的 checker.cpp 不会用所以我自己根据题意手写了一个。很快调完了。

还有 20min。继续做 T4 发现怎么优化这个算法都和冒泡排序一样分(\(1\) 分)。

检查了一下就交了。

\(100+100+12+26=238\)。没挂分。

总结

好的:

  • 没挂分(这场不挂分真挺难的)
  • T4 得到的部分分很多

不足:

  • T1 花的时间有点久。尽管最后时间并没有十分紧张。

知识点

T1:数学,贪心

T2:set,线段树,贪心

题解

A. 邻间的骰子之舞

为了方便,让整个过程结束后再复制一次。

令我们在有 \(a_1,a_2,\dots,a_m\) 个字符时进行了复制操作。需要满足:

  • \(1=a_1<a_2<\dots<a_m\)
  • \(a_m \ge n\)
  • \(a_i \bmod a_{i-1}=0\)

那么答案为 \(mx + y\sum_{i=2}^m \frac{a_i-a_{i-1}}{a_{i-1}}\)

化简一下 \((m-1)(x-y)+ y\sum_{i=2}^m \frac{a_i}{a_{i-1}}\)

\(k_i=\frac {a_i}{a_{i-1}}\)\(k_1 = a_1\)

注意到 \(a_m = \prod_{i=2}^m k_i\)。所求是 \(\sum_{i=2}^m k_i\)。问题变成了:

\(m-1\) 个数,使得乘积 \(\ge n\) 且和最小。求这个最小和。

二分判断:

是否存在 \(m\) 个数,使得其和 \(\le mid\),且乘积 \(\ge n\)

和一定,差小积大。肯定先平均分。剩下的能铺多少铺多少。

B. 星海浮沉录

若答案为 \(0\),则意味着数组中离得最近的两个 \(0\) 中间的数的数量 \(\ge x\)

在答案不为 \(0\) 的情况下,若答案为 \(1\),则意味着数组中离得最近的两个 \(1\) 中间的数的数量 \(\ge x\)

\(p_i\) 表示数组中离得最近的两个 \(i\) 中间的数的数量。那么答案为最小的满足 \(p_i \ge x\)\(i\)

用 set 维护这个 \(p\),那么找到答案可以线段树上二分。

posted @ 2024-11-26 17:13  2huk  阅读(3)  评论(0编辑  收藏  举报