20260330 模拟测 总结
Preface
嗯!我怎么 T4 又写了一个和大家做法不一样的神秘东西!
最新结论:每当嘎嘎喵 AC % 你赛 T4 时,用的总是和大家不一样的做法。
怎么回事呢。
为什么最后一场还是翻不了啊啊啊,为什么为什么。我为什么是 rk\(10\) 呜呜呜。呜。
T1
| 估分 | 得分 | 挂分 |
|---|---|---|
| \(100\) | \(100\) | \(0\) |
贪心地去考虑,我们让 \(\min d\) 和剩下的每个 \(d\) 都去连即可,不难证明这一定是最优答案。
T2
| 估分 | 得分 | 挂分 |
|---|---|---|
| \(100\) | \(100\) | \(0\) |
枚举 \(k\) 判断 \(a_k\) 是否为“好元素”,只需要考虑前面每一个 \(a_x\)(\(x < k\))看是否存在 \(a_i + a_j = a_k - a_x\)(\(i,j < k\))即可。\(a_i+a_j\) 这类值可以在循环时挨个统计出来。
T3
| 估分 | 得分 | 挂分 |
|---|---|---|
| \(100\) | \(100\) | \(0\) |
为什么要在 T3 放打磨你。为什么要在 T3 放打磨你。为什么要在 T3 放打磨你。
我觉得好恶心,但是,你们怎么都不用 BFS 啊?!
BFS 找出每个连通块,先判断它是不是外围了一圈 #——别想复杂,其实就是这个连通块不涉及到第 \(1\) 行第 \(n\) 行和第 \(1\) 列第 \(m\) 列就行。然后就是最恶心的,判断是否是菱形图案。
我这里用了一个奇奇妙妙的方法:首先出现行数需要是奇数,其次枚举每一行,所出现的列也得连续并且也得是奇数个,最后判一下是不是上下都是尖端(只出现 \(1\) 列)并且越往中间越扩散开来。
嗯……然后就做完了,代码其实都没有 \(100\) 行。
T4
| 估分 | 得分 | 挂分 |
|---|---|---|
| \(100\) | \(100\) | \(0\) |
唔……我们考虑到可以拆开某个 \(a_i\) 去相互连接。显然贪心地考虑肯定拆出 \(1\) 是最优秀的,于是我们去模拟这个拆的过程然后实时考虑答案。
怎么模拟?每次找出目前 \(a\) 中最小的一个 \(>1\) 的 \(A\),把它拆成 \(1\) 和 \(A-1\)。拆的过程中要实时考虑现在的答案——目前 \(a\) 的长度若为 \(n'\),则考虑其中较小的 \(\lfloor \frac{n'}{2} \rfloor\) 个数计算贡献(\(1\) 的贡献是 \(1\),其他 \(\ge 2\) 的都是 \(2\))之和。答案就是这一堆东西的 \(\min\)。
诶诶但是不对啊,你难道要一直就这么拆下去吗?那你这要是最后得全拆成 \(1\),\(\sum L\) 你复杂度不得炸了???
咋可能啊,我们发现答案上界的上界是 \(n-1\),就是不拆单个,直接相邻的连起来,所以只要我们拆的时候的 \(n' \div 2 < n-1\) 就还可以继续做下去。
具体实现我用了优先队列。我怎么天天用优先队列。
Summary
好哦!算是翻了……?
为什么我永远是同分倒一。
标准分第 \(2\),oymz 还是太强了差 \(30\) 分完全追不上。对。
喵。

浙公网安备 33010602011771号