CSP 2023 题解

Junior

A

H2O 题目。每次计算出要拿走的苹果个数,直接减去就行了。

每次拿走的苹果个数是 $\frac{n}{3}$ 左右,因此时间复杂度为 $O(n \log_{3} n)$ 。

如何计算最后一个苹果什么时候被拿走?

设剩余个数为 last , 易证第一次出现 last % 3 == 1 的时候最后一个苹果被拿走。

B

一眼贪心。

考虑自 $i$ 号点至第 $i + 1$ 号点 的路程,其燃油必由 $\min_{j=1}^{i}cost_j$ 提供。

直接 $O(n)$ 模拟加维护前缀最大值即可。

C

别人都告诉你怎么实现了。敲不出来就是语文老师的锅了。

注意几个实现细节:

  • $\frac{-b \pm \sqrt{\Delta}}{2a}$ 不一定是 $\frac{-b +\sqrt{\Delta}}{2a}$ 为最大的解。这取决于 $a$ 的正负。解决方案是,最后算出来后面的根号带的系数如果是负数,直接改成正的即可。不影响结果。

  • 全是 $0$ 的情况要特判。不然会输出一个空行。

  • 约分时用绝对值约分,不要直接用负数取模。

上面几点就是我考场上在这道题上花了接近 2h 的原因。

不过幸亏大样例够强。

我衷心希望 CCF 用心造样例,用脚造数据。

D

一眼多维(分层图)最短路。果果牛逼。

dis % k 作第二维。

可是边的开放时间怎么处理?

注意到答案具有二分性。若在 t 时刻可以到达终点,则 t + k 时刻也一定能到达终点。

于是二分答案即可。注意只用二分 k 的倍数。

那么 check 怎么写呢?

我们没办法知道确切的开始时间。

那不如直接在反图上跑一边 $n \to 1$ 的最短路?

恭喜你,正解。

Senior

死的太惨了。

不过要从悲伤中走出来。再努力一把,争取有机会和朋友们一起明年再战。

A

这就是所谓的大众分。

暴力枚举加 check 即可。

B

括!号!匹!配!

但是朴素栈算法是 $O(n ^ 2)$ 的,显然会超时。

注意到一个性质:如果两个位置的前缀单调栈形态相同,说明中间那一段可以完全消除,也就是一个符合要求的区间。

那么对栈的形态进行哈希, $O(n)$ 跑一遍括号匹配,再用 unordered_map 记录前缀个数即可。

严格线性的算法。比我考场上写的错误的线性 dp 牛逼多了。

C

大%拟。

主要是靠码力。

查询地址与对应名称的两种操作需要递归处理。

还有就是细节,例如结构体最后的结束位置要补齐到它的对齐标准的整数倍。

我两个小时码了 6000+b 。我自己都很震惊。

可惜考场上写的是 15 的部分分。

D

咕咕咕

本文作者:aaaaaaqqqqqq

本文链接:https://www.cnblogs.com/aaaaaaqqqqqq/p/17976954

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   aaaaaaqqqqqq  阅读(17)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.